Djando模板
在上一章节中,我们使用django.http.HttpResponse()来输出”Hello World!”,实际上并没有遵守MVT模式。
下面针对上面的程序做一个修改,使其符合MVT模式。
在test_django工程目录,创建一个templates目录,这个目录用于存放模板。
在templates目录创建一个hello.html文件
整个目录结构如:
hello.html文件代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {{abc}} # 这个是django用于占位的,具体看下文 </body> </html>
在test_django目录下的settings.py文件中,修改TEMPLATES中的DIR为[BASE_DIR+”/templates”],如下所示:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [BASE_DIR+"/templates"],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
- 修改view.py中的显示
from django.shortcuts import render
def hello(request):
context = {}
context['abc'] = 'abc占位的内容:一行白鹭上青天' # 这里abc,赋值的内容,就会替代hello.html文件中的{{abc}}
# 这里context不要写成这样:
# context = {'abc':'abc占位的内容:一行白鹭上青天'},这样写,context是set类型
return render(request=request, template_name='hello.html', context=context)
- 启动服务后,在浏览器输入:
127.0.0.1:8000
,如图:
Django模板标签
- if/else标签
{% if condition %}
...
{% endif %}
或者
{% if condition1 %}
...
{% elif condition2 %}
...
{% else %}
...
{% endif %}
- for标签
# 正序迭代
{% for item in list %}
...
{% endfor %}
eg:
<ul>
{% for item in list %}
<ul>{{item}}
{% endfor %}
</ul>
# 反向迭代
{% for item in list reversed %}
...
{% endfor %}
- ifequal/ifnotequal
ifequal:如果相等
ifnotequal:如果不相等
# 比较a,b两个变量
{% ifequal a b %}
...
{% endifequal %}
或者
{% ifequal a b %}
...
{% else %}
...
{% endifequal %}
- 注释标签
{# 注释内容 #}
- 过滤器
模板过滤器可以在变量被显示前修改它,过滤器使用管道字符,如下所示:
{{ name | lower }} # {{name}}变量被过滤器lower处理后,文档大写转成小写。
{{ name | first | upper }} # {{name}}的首字母转成大写
{{name | truncatewords:"5"}} # 显示{{name}}变量的前5个字符
除此之外还有addslashes,data,length过滤器
- include标签
include标签允许在模板中包含其他的模板的内容。
{{% include "nav.html" %}} 包含nav.html
模板的继承
模板可以使用继承的方式来实现复用。
1.接下来在templates目录创建一个base.html文件,文件内
容如下:<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h2>{% block title %}标题{% endblock %}</h2> <h4>{% block author %} 作者 {% endblock %}</h4> {% block mainbody %}<p>段落</p>{% endblock %} </body> </html>
2.创建一个article.html文件
{% extends "base.html" %} # 表示继承base.html {% block title %} # 替换base.html中的占位内容,下同 背景 {% endblock %} {% block author %} 朱自清 {% endblock %} {% block mainbody %} 我与父亲不相见已二年余了,我最不能忘记的是他的背影。 {% endblock %}
3.修改view.py的显示
from django.shortcuts import render def hello(request): return render(request=request, template_name='article.html')
4.启动服务,浏览器输入
127.0.0.1:8000
,显示如下: