本节主要讲 Django模板中的循环,条件判断,常用的标签,过滤器的使用。
-
列表,字典,类的实例的使用
-
循环:迭代显示列表,字典等中的内容
-
条件判断:判断是否显示该内容,比如判断是手机访问,还是电脑访问,给出不一样的代码。
-
标签:for,if 这样的功能都是标签。
-
过滤器:管道符号后面的功能,比如{{ var|length }},求变量长度的 length 就是一个过滤器.
<span style="font-size:14px;">from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
#example
url(r'^$','learn.views.index'),
url(r'^hello/$','learn.views.show'),
url(r'^hello/(\S+)/(\d+)/$','learn.views.show2'),
url(r'^$','learn.views.toTemplate', name='temp')#新增
]</span>在views.py文件中加入如下方法:<span style="font-size:14px;">def toTemplate(request):
message=u"我正在学习Django"
return render(request,'home.html',{"message":message})</span>到learn目录下创建一个templates文件夹.并在里面放置一个home.html页面.内容如下:<span style="font-size:14px;"><!DOCTYPE html>
<html>
<head>
<title>欢迎光临</title>
</head>
<body>
{{message}}
</body>
</html></span>运行服务器,并输入连接:http://127.0.0.1:8000/tem/基本的 for 循环 和 List内容的显示
views.py
|
1
2
3
|
def home(request): TutorialList = ["HTML", "CSS", "jQuery", "Python", "Django"] return render(request, 'home.html', {'TutorialList': TutorialList}) |
在视图中我们传递了一个List到模板 home.html,在模板中这样使用它:
home.html
|
1
2
3
4
|
教程列表:{% for i in TutorialList %}{{ i }}{% endfor %} |
for 循环要有一个结束标记,上面的代码假如我们对应的是首页的网址(自己修改urls.py),显示在网页上就是:
简单总结一下:一般的变量之类的用 {{
}}(变量),功能类的,比如循环,条件判断是用 {%
%}(标签)显示字典中内容:
views.py
|
1
2
3
|
def home(request): info_dict = {'site': u'自强学堂', 'content': u'各种IT技术教程'} return render(request, 'home.html', {'info_dict': info_dict}) |
home.html
|
1
|
站点:{{ info_dict.site }} 内容:{{ info_dict.content }} |
在模板中取字典的键是用点info_dict.site,而不是Python中的 info_dict['site'],效果如下:

还可以这样遍历字典:
|
1
2
3
|
{% for key, value in info_dict.items %} {{ key }}: {{ value }}{% endfor %} |
其实就是遍历这样一个 List: [('content', u'自强学堂'), ('site', u'各种IT技术教程')]

在模板进行 条件判断和 for 循环的详细操作:
views.py
|
1
2
3
|
def home(request): List = map(str, range(100))# 一个长度为100的 List return render(request, 'home.html', {'List': List}) |
假如我们想用逗号将这些元素连接起来:
home.html
|
1
2
3
|
{% for item in List %} {{ item }}, {% endfor %} |
效果如下:

我们会发现最后一个元素后面也有一个逗号,这样肯定不爽,如果判断是不是遍历到了最后一个元素了呢?
用变量 forloop.last 这个变量,如果是最后一项其为真,否则为假,更改如下:
|
1
2
3
|
{% for item in List %} {{ item }}{% if not forloop.last%},{% endif %} {% endfor %} |

在for循环中还有很多有用的东西,如下:
| 变量 | 描述 |
|---|---|
| forloop.counter | 索引从 1 开始算 |
| forloop.counter0 | 索引从 0 开始算 |
| forloop.revcounter | 索引从最大长度到 1 |
| forloop.revcounter0 | 索引从最大长度到 0 |
| forloop.first | 当遍历的元素为第一项时为真 |
| forloop.last | 当遍历的元素为最后一项时为真 |
| forloop.parentloop |
用在嵌套的 for 循环中, 获取上一层 for 循环的 forloop |
当列表中可能为空值时用 for empty
|
1
2
3
4
5
6
7
|
<ul>{% for athlete in athlete_list %} <li>{{ athlete.name }}</li>{% empty %} <li>抱歉,列表为空</li>{% endfor %}</ul> |
模板上得到视图对应的网址:{% url "view-name" arg1 arg2 %}
|
1
2
3
4
5
6
7
|
# urls.pyurlpatterns = patterns('', url(r'^add/(\d+)/(\d+)/$', 'calc.views.add', name='add'),)# template html{% url 'add' 4 5 %} |
这样网址上就会显示出:/add/4/5/ 这个网址,假如我们以后修改 urls.py 中的
|
1
|
r'^add/(\d+)/(\d+)/$' |
这一部分,改成另的,比如:
|
1
|
r'^jiafa/(\d+)/(\d+)/$' |
这样,我们不需要再次修改模板,当再次访问的时候,网址会自动变成 /jiafa/4/5/
还可以使用 as 语句将内容取别名(相当于定义一个变量),多次使用(但视图名称到网址转换只进行了一次)
|
1
2
3
|
{% url 'some-url-name' arg arg2 as the_url %}<a href="{{ the_url }}">链接到:{{ the_url }}</a> |
模板中的逻辑操作:
6.1、 ==, !=, >=, <=, >, < 这些比较都可以在模板中使用,比如:
|
1
2
3
4
5
6
7
8
9
10
11
|
{% if var >= 90 %}成绩优秀,自强学堂你没少去吧!学得不错{% elif var >= 80 %}成绩良好{% elif var >= 70 %}成绩一般{% elif var >= 60 %}需要努力{% else %}不及格啊,大哥!多去自强学堂学习啊!{% endif %} |
and, or, not, in, not in 也可以在模板中使用
假如我们判断 num 是不是在 0 到 100 之间:
|
1
2
3
4
5
|
{% if num <= 100 and num >= 0 %}num在0到100之间{% else %}数值不在范围之内!{% endif %} |
假如我们判断 'ziqiangxuetang' 在不在一个列表变量 List 中:
|
1
2
3
|
{% if 'ziqiangxuetang' in List %}自强学堂在名单中{% endif %} |
本文介绍了Django模板中的核心概念,包括使用for循环遍历列表、字典和类实例,条件判断以根据设备类型显示不同内容,以及如何运用标签和过滤器。通过具体示例展示了如何在模板中实现for循环的控制,如避免最后一个元素后的逗号,并利用forloop.last判断。此外,还讲解了在模板中进行逻辑操作,如比较、范围判断以及成员资格检查等。
451

被折叠的 条评论
为什么被折叠?



