[Django 템플릿 시스템] Django의 템플릿 렌더링 메커니즘

4637 단어 Django
주: 다음 내용은 현대마법학원 사이트의 Django의 템플릿 렌더링(render) 메커니즘에 옮겨져 학습용으로만 제공됩니다.
Template 대상을 만들면 context로 데이터를 전달할 수 있습니다.하나의 context는 일련의 변수와 그것들의 값의 집합이다.context는 Django에서 Context 클래스로 표현되며,django에서 표현됩니다.template 모듈에 있습니다.그것의 구조 함수는 선택할 수 있는 매개 변수를 가지고 있다. 그것은 사전 매핑 변수와 그것들의 값이다.Template 객체에 대한 render() 방법을 호출하고 템플릿을 채우기 위해 context를 전달합니다.
>>> from django.template import Context, Template
>>> t = Template('My name is {{ name }}.')
>>> c = Context({'name' : 'nowamagic'})
>>> t.render(c)
u'My name is nowamagic.'

우리가 지적해야 할 점은 t.render (c) 가 되돌아오는 값은 일반적인 Python 문자열이 아닌 유니코드 대상이다.문자열 앞의 u를 통해 구분할 수 있습니다.프레임에서 Django는 일반 문자열 대신 유니코드 객체를 계속 사용합니다.만약 당신이 이렇게 하는 것이 당신에게 얼마나 큰 편리를 가져다 주었는지 알고 있다면, 가능한 한 Django가 막후에서 당신을 위해 이렇게 많은 일을 차근차근 해 준 것에 감사하도록 하세요.만약 네가 그 중에서 무엇을 얻었는지 이해하지 못한다면 걱정하지 마라.유니코드에 대한 Django의 지원만 알면 응용 프로그램이 기본적인 A-Z 영문 문자가 아닌 다양한 문자 집합을 쉽게 처리할 수 있습니다.
사전 및 contexts
Python의 사전 데이터 형식은 키워드와 그 값의 매핑입니다.Context는 사전과 유사하며 더 많은 기능을 제공합니다.
변수 이름은 영문자(A-Z 또는 a-z)로 시작해야 하며 숫자, 밑줄 및 소수점을 포함할 수 있습니다.(소수점은 여기서 특별한 용도가 있다. 잠시 후에 우리가 말하겠다) 변수는 대소문자가 민감하다.
다음은 템플릿 작성 및 렌더링의 예입니다.
>>> from django.template import Template, Context
>>> raw_template = """

Dear {{ person_name }},

... ...

Thanks for placing an order from {{ company }}. It's scheduled to ... ship on {{ ship_date|date:"F j, Y" }}.

... ... {% if ordered_warranty %} ...

Your warranty information will be included in the packaging.

... {% else %} ...

You didn't order a warranty, so you're on your own when ... the products inevitably stop working.

... {% endif %} ... ...

Sincerely,
{{ company }}

""" >>> t = Template(raw_template) >>> import datetime >>> c = Context({'person_name': 'John Smith', ... 'company': 'Outdoor Equipment', ... 'ship_date': datetime.date(2009, 4, 2), ... 'ordered_warranty': False}) >>> t.render(c) u"

Dear John Smith,



Thanks for placing an order from Outdoor Equipment. It's scheduled to
ship on April 2, 2009.




You didn't order a warranty, so you're on your own when
the products inevitably stop working.




Sincerely,
Outdoor Equipment

"

이 코드를 단계적으로 분석해 보겠습니다.
우선 (import) 클래스인 Template와Context를 가져옵니다. 모듈django에 있습니다.template에.우리는 템플릿의 원본 텍스트를 변수raw 에 저장합니다template.여러 줄을 포함할 수 있기 때문에, 우리는 이 텍스트들을 표시하기 위해 세 개의 인용 부호를 사용했다는 것을 알아차렸다.
다음에 우리는 템플릿 대상 t를 만들어서rawtemplate는 Template 클래스 구조 함수의 매개 변수입니다.
파이톤의 표준 라이브러리에서datetime 모듈을 가져왔습니다. 나중에 사용할 것입니다.
그런 다음 Context 객체 - c를 만듭니다.Context 구조의 매개 변수는 Python 사전 데이터 형식입니다.여기서 매개 변수person 을 지정합니다name의 값은'John Smith'이고 매개 변수 company의 값은'Outdoor Equipment'등입니다.
마지막으로, 우리는 템플릿 대상에서render () 방법을 호출하여context 파라미터를 전달합니다.이것은 렌더링된 템플릿을 되돌려주는 방법입니다. 템플릿 변수를 실제 값과 실행 블록 탭으로 바꿉니다.
Warranty paragraph 표시는orderedwarranty의 값은 True입니다.시간 표시에 주의하십시오. April 2, 2009. 이것은 'F j, Y' 형식으로 표시됩니다.
만약 당신이 파이썬 초보자라면, 출력에 왜 리턴 줄을 바꾸는 문자 (') 가 있는지 생각하고 있을 것입니다. 리턴 줄을 표시하는 것이 아니라?이것은 Python 상호작용 해석기이기 때문에: t.render (c) 를 호출하여 문자열을 되돌려줍니다. 해석기는 이 문자열의 실제 내용을 출력하는 것이 아니라 출력하는 것입니다.'대신 줄 바꾸기를 표시하려면 print 문장: print t.render (c) 를 사용하십시오.
이것이 바로 Django 템플릿 시스템을 사용하는 기본 규칙입니다. 템플릿을 쓰고, Template 대상을 만들고, Context를 만들고,render () 방법을 호출합니다.
동일한 템플릿, 여러 컨텍스트
템플릿 객체가 있으면 다음과 같이 여러 context를 렌더링할 수 있습니다.
>>> from django.template import Template, Context
>>> t = Template('Hello, {{ name }}')
>>> print t.render(Context({'name': 'John'}))
Hello, John
>>> print t.render(Context({'name': 'Julie'}))
Hello, Julie
>>> print t.render(Context({'name': 'Pat'}))
Hello, Pat

언제든지 같은 템플릿 원본으로 여러 context를 렌더링할 수 있습니다. 템플릿을 한 번만 만들고 render () 방법을 여러 번 호출하면 렌더링이 더욱 효율적입니다.
# Bad
for name in ('John', 'Julie', 'Pat'):
    t = Template('Hello, {{ name }}')
    print t.render(Context({'name': name}))

# Good
t = Template('Hello, {{ name }}')
for name in ('John', 'Julie', 'Pat'):
    print t.render(Context({'name': name}))

Django 템플릿 해석이 매우 빠릅니다.대부분의 해석 작업은 백엔드에서 간단한 정규 표현식에 대한 일회성 호출을 통해 이루어진다.이것은 XML 기반 템플릿 엔진과 뚜렷한 대비를 이룬다. 그 엔진들은 XML 해석기의 비용을 부담하고 Django 템플릿 렌더링 엔진보다 몇 개의 수량 등급이 느리다.

좋은 웹페이지 즐겨찾기