由来
因为使用 django.http.HttpResponse() 来输出 “Hello World!”。该方式将数据与视图混合在一起,不符合 Django 的 MVC 思想,所以有了Django 模板的应用,用于分离文档的表现形式和内容。
语法
- 双括号
hello.html 文件代码:
<h1>{{ hello }}</h1>
view.py 文件代码:
from django.shortcuts import render
def hello(request):
context = {}
context['hello'] = 'Hello World!'
return render(request, 'hello.html', context)# context 字典中元素的键值 "hello" 对应了模板中的变量 "{{ hello }}"。
# 或
def hello(request):
hello= 'Hello World!'
return render(request, 'hello.html', {”hello“:hello})
- if/else 标签
//基本语法格式如下:
{% if condition %}
... display
{% endif %}
//或者:
{% if condition1 %}
... display 1
{% elif condition2 %}
... display 2
{% else %}
... display 3
{% endif %}
//{% if %} 标签接受 and , or 或者 not 关键字来对多个变量做判断 ,或者对变量取反( not )
- for 标签
//{% for %} 允许我们在一个序列上迭代。
<ul>
{% for athlete in athlete_list %}
<li>{{ athlete.name }}</li>
{% endfor %}
</ul>
- ifequal/ifnotequal 标签
//{% ifequal %} 标签比较两个值,当他们相等时,显示在 {% ifequal %} 和 {% endifequal %} 之中所有的值。
{% ifequal user currentuser %}
<h1>Welcome!</h1>
{% endifequal %}
- 注释标签
Django 注释使用 {# #}。 - 过滤器
模板过滤器可以在变量被显示前修改它,过滤器使用管道字符
{{ my_list|first|upper }} - 模板继承
所有的 {% block %} 标签告诉模板引擎,子模板可以重载这些部分。
{% block mainbody %}
<p>original</p>
{% endblock %}
{% block mainbody %}
<p>继承了上面的文件</p>
{% endblock %}
注意
需要向Django说明模板文件的路径,修改settings.py,修改 TEMPLATES 中的 DIRS 为 [BASE_DIR+"/templates",]