>백엔드 개발 >파이썬 튜토리얼 >Django 기본 튜토리얼 - 템플릿

Django 기본 튜토리얼 - 템플릿

高洛峰
高洛峰원래의
2016-10-17 14:16:161113검색

참고: Python 버전은 3.3.1, Django 버전은 1.5.1, 운영 체제는 Windows 7입니다. 다른 버전에는 독자가 직접 살펴볼 수 있는 몇 가지 차이점이 있습니다.

이전 장에서 뷰가 텍스트를 반환할 때 HTML 코드가 Python 코드에 하드 코딩되는 문제를 발견했을 것입니다. %s 등이 있습니다. 이렇게 작성하면 프로그램이 더 복잡해지고, 수정하면 매우 번거로워집니다. 더욱이 HTML 코드 프로그래머가 반드시 Python 코드를 알지 못할 수도 있습니다. 일반적으로 HTML 프런트엔드 페이지와 Python 백엔드를 분리합니다. 프런트 엔드는 페이지 표시만 담당하고, 백그라운드는 데이터 처리 및 기타 작업만 담당합니다. 따라서 템플릿이 특히 중요합니다.

그럼 템플릿이란 무엇일까요?

템플릿은 문서의 표현과 내용을 구분하는 텍스트입니다. 템플릿은 문서 표시 방법을 지정하는 자리 표시자와 다양한 기본 논리(템플릿 태그)를 정의합니다. 템플릿은 일반적으로 HTML을 생성하는 데 사용되지만 Django의 템플릿은 텍스트 기반 형식으로 문서를 생성할 수도 있습니다. 간단한 예를 통해 템플릿이 무엇인지 알아봅시다. (이 예제는 DjangoBook2에서 가져온 것입니다.)

 <head><title>Ordering notice</title></head>
 <body>
 <h1>Ordering notice</h1>
 <p>Dear {{ person_name }},</p>
 <p>Thanks for placing an order from {{ company }}. It&#39;s scheduled to
 ship on {{ ship_date|date:"F j, Y" }}.</p>
 <p>Here are the items you&#39;ve ordered:</p>
 <ul>
 {% for item in item_list %}
     <li>{{ item }}</li>
 {% endfor %}
 </ul>
 {% if ordered_warranty %}
     <p>Your warranty information will be included in the packaging.</p>
 {% else %}
     <p>You didn&#39;t order a warranty, so you&#39;re on your own when
     the products inevitably stop working.</p>
 {% endif %}
 <p>Sincerely,<br />{{ company }}</p>
 </body>
 </html>

🎜>위에서 보듯이 Python 코드를 {{...} } 또는 {%...%}는 템플릿입니다. 첫 번째 {{person_name}}은 실제로 변수이고 {%for.. ..%} 또는 {% if ...%} 등은 루프입니다. . 위 코드의 의미를 깊이 파고들지 않고, 단계별로 사용법을 배워보겠습니다.


>>> from django import template
>>> t = template.Template(&#39;My name is {{ name }}.&#39;)
>>> c = template.Context({&#39;name&#39;: &#39;Adrian&#39;})
>>> print(t.render(c))
My name is Adrian.
>>> c = template.Context({&#39;name&#39;: &#39;Fred&#39;})
>>> print(t.render(c))
My name is Fred.

위의 코드를 보면 해보고 싶은 마음이 생길 수도 있는데, 그 결과는 두 번째 줄에서 오류가 발생했습니다. 일반적으로 발생할 수 있는 유일한 오류는 'DJANGO_SETTINGS_MODULE' 오류입니다. 이는 Django가 DJANGO_SETTINGS_MODULE 환경 변수를 검색할 때 settings.py에 설정되어 있고 Python 셸을 직접 시작하면 어떤 구성인지 알 수 없기 때문입니다. 사용할 파일. 예를 들어 mysite가 Python 검색 경로에 있다고 가정하면 DJANGO_SETTINGS_MODULE을 'mysite.settings'로 설정해야 합니다. 따라서 환경 변수를 설정하는 수고를 피하려면 다음과 같이 Python 셸을 시작해야 합니다.

python Manage.py Shell

이렇게 하면 익숙하지 않은 환경 변수를 구성하는 수고를 덜 수 있습니다.

해당 코드를 분석해 보겠습니다.

>>> from django import template  #从django中导入template对象
>>> t = template.Template(&#39;My name is {{ name }}.&#39;)  #使用template对象的Template()方法
>>> c = template.Context({&#39;name&#39;: &#39;Adrian&#39;})  #使用template对象的Context()函数给赋值,比如name的值就是Adrian,Context()的()里面是一个字典
>>> print(t.render(c))   #渲染模板,也就是讲Context赋值后的name的值Adrian替换上面Template()中的{{name}}并输出
My name is Adrian.
>>> c = template.Context({&#39;name&#39;: &#39;Fred&#39;})
>>> print(t.render(c))
My name is Fred.

위의 예에서 볼 수 있듯이 템플릿 사용에는 세 단계가 있습니다. 1. 템플릿 함수를 호출합니다. 2. 컨텍스트 함수를 호출합니다. 3. 렌더링 함수를 호출합니다. 그렇게 간단합니다.


몇 가지 코드를 통해 Context() 함수에 대해 알아보겠습니다.


참고: 위의 items.2는 items.-1 또는 기타 음수 인덱스일 수 없습니다.
#代码段1:
>>> from django.template import Template,Context
>>> t=Template(&#39;hello,{{name}}&#39;)
>>> for name in (&#39;A&#39;,&#39;B&#39;,&#39;C&#39;):
...     print(t.render(Context({&#39;name&#39;:name})))
...
hello,A
hello,B
hello,C
#代码段2:
>>> from django.template import Template,Context
>>> person={&#39;name&#39;:&#39;Thunder&#39;,&#39;age&#39;:&#39;108&#39;}
>>> t=Template(&#39;{{person.name}} is {{person.age}} years old!&#39;)
>>> c=Context({&#39;person&#39;:person})#后面的这个person是一个字典
>>> t.render(c)
&#39;Thunder is 108 years old!&#39;
#代码段3:
>>> from django.template import Template,Context
>>> t=Template(&#39;Item 2 is {{items.2}}&#39;)#items.2的意思是调用items列表的第3个元素,因为列表的索引是从0开始的
>>> c=Context({&#39;items&#39;:[&#39;Apple&#39;,&#39;Banana&#39;,&#39;Orange&#39;]})
>>> t.render(c)
&#39;Item 2 is Orange&#39;

위 세 가지 코드를 잘 보시면, 그냥 추론을 하고 계시나요? 또한 기본적으로 변수가 없으면 템플릿 시스템은 해당 변수를 빈 문자열로 표시하고 실패를 나타내기 위해 아무 작업도 수행하지 않습니다.


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.