웹 템플릿 엔진 기본 도입부

4379 단어
문자열 표현의 함수를 실행하고 글로벌 변수를 제공합니다.
 1 #! /usr/bin/env python3
 2 
 3 namespace = {'name': 'zingp', 'data': [16, 19, 25]}
 4 
 5 code = '''def sayHi():return  "name %s ,age %d" %(name,data[1],) '''
 6 
 7 func = compile(code, '', "exec")
 8 # print("func>>>:",func)
 9 exec(func, namespace)
10 # print(namespace)
11 result = namespace['sayHi']()
12 
13 print(result)

실행 결과:name zingp,age 19
위 코드 해결:
  • 다섯 번째 줄, 코드는 문자열이고 이 문자열의 내용은 함수체이다.
  • 일곱 번째 줄, 코드 문자열을 함수sayHi
  • 로 컴파일하기
  • 9행에서 함수sayHi를namespace 사전(key는sayHi)에 추가하고python의 모든 내장 함수를namespace 필드에 추가합니다(key는 builtins).이렇게 하면 우리 print(namespace)는 다음과 같은 사전을 얻을 수 있다.
  • 1 {'sayHi': , 'data': [16, 19, 25], 'name': 'zingp', '__builtins__': {python       ...}}

    그리고namespace 사전의 키,value는 하나의 전역 변수와 같습니다.
    1 name = 'zingp'
    2 data = [16, 19, 25]
    3 def sayHi():
    4     return "name %s ,age %d" % (name,data[1],)
  • 11줄에서sayHi 함수를 실행하고 반환값을result
  • 에 복사합니다
  • 13행, 출력result
  • 나는 문자열을 함수로 바꾸고 이 함수에 전역 변수를 제공했다. 공교롭게도 초가 아니었는가.이 기능은python의 웹 프레임워크에서 템플릿 언어 부분에서 매우 중요한 부분이다. 템플릿 처리 과정에서 먼저 html 파일을 읽은 다음에 html 파일을 분할한 다음에 분할된 파일이 하나의 문자열로 표시하는 함수를 구성하고 그 다음에 상술한 방법으로 문자열이 표시하는 함수를 집행하기 때문이다.

    좋은 웹페이지 즐겨찾기