这节主要讲 Django 模板中的循环,条件判断,常用的标签,过滤器的使用
- 列表,字典,类的实例
- 循环,迭代显示列表,字典中的内容
- 条件循环,判断是否有该内容,比如判断是手机访问还是电脑访问
- 标签:for,if 这样的功能都是标签
- 过滤器:管道符号后面的功能,比如{{var | length}},求变量长度的 length 就是一个过滤器
如果需要将一个或多个变量共享给多个网页或所有网页使用,比如在网页上显示来访者 ip ,这个用 Django 上下文渲染器来做
实例1:显示一个基本的字符串在网页上
view.py
# -*- coding: utf-8 -*- from django.shortcuts import render def home(request): string = u"我在自强学堂学习Django,用它来建网站" return render(request, 'home.html', {'string': string})
在视图中我们传递了一个字符串名称是 string 到模板 home.html。
home.html
# 在模板中使用 {{ string }}
实例2:讲解基本的 for 循环和 list 内容显示
views.py
def home(request): Tutorialist = ["HTML","CSS","jQuery","Python","Django"] return render(requset,'home.html',{'Tutorialist':Tutorialist})
在视图中我们传递了一个 List 到模板 home.html 。
home.html
{% for i in Tutorialist %} {{ i }} {% endfor %}
for 循环需要一个结束标记
简单总结一下,一般的变量之类的用 {{}},功能类的,比如循环,条件判断使用 {% %}
实例3:显示字典中内容
views.py
def home(request): info_dict = {'site':u'元素1','content':'元素2'} return render(request,'home.html',{'info_dict':info_dict})
home.html
{{ info_dict.site }} {{ info_dict.content }}
在模板中取字典的键是 info_site.site 而不是 Python 中的 info_dict['site']
还可以遍历字典
{% for key,value in info_dict.items %} {{ key }}:{{ value }} {% endfor %}
实例4:在模板进行条件判断和 for 循环的详细操作
view.py
def home(request): List = map(str,range(100)) # 一个长度为 100 的list return render(request,'home.html',{'List':List})
假如想用逗号把这些元素连接起来
home.html
{% for item in List %} {{ item }}, {% endfor %}
会发现在最后一个元素的后面也有一个逗号
用 forloop.last 这个变量,如果是最后一项则为真,否则为假
{% for item in List %} {{ item }}{% if not forloop.last %},{% endif %} {% endfor %}
在 for 循环中还有很多有用的东西
变量 | 描述 |
---|---|
forloop.conuter | 索引从 1 开始计算 |
forloop.counter0 | 索引从 0 开始计算 |
forloop.revconter | 索引从最大长度到 1 |
forloop.revconter0 | 索引从最大长度到 0 |
forloop.first | 当遍历的元素的第一项为真 |
forloop.last | 当遍历的元素为最后一项为真 |
forloop.parentloop | 用在嵌套的 for 循环中,获取上一层 for 循环的 forloop |
实例5:模板上得到视图对应得网址
# views.py def add(request,a,b): c = int(a) + int(b) return HttpResponse(str(c)) # urls.py urlpatterns = patterns('', url(r'^add/(\d+)/(\d+)/$,'app.views.add',name='add') ) # template html {% url 'add' 4 5 %}
实例6:模板中的逻辑操作
== , != , >= , <= , > , < 这些比较都可以在模板中使用,比如
{% if var >= 90 %} good {% elif var >= 80 %} all right {% else %} work hard {% endif %}
and,or,not,in,not in 也可以在模板中使用
# 判断 num 是不是在 0 到 100 之间 {% if num > 0 and num < 100 %} right {% else %} wrong {% endif %} # 判断元素是不是在列表里 {% if a in list %} right {% endif %}
实例7:模板中获取当前网址,当前用户等
修改 setting.py
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ ... 'django.template.context_processors.request', ... ], }, }, ]
然后就可以在模板中使用 request 了
# 获取当前用户 {{ request.user }} # 如果登陆就显示内容,不登陆就不显示内容: {% if request.user.is_authenticated %} {{ request.user.username }},您好! {% else %} 请登陆,这里放登陆链接 {% endif %} # 获取当前网址 {{ request.url }} # 获取当前 GET 参数 {{ request.GET.urlencode }} # 例子 <a href="{{ request.path }}?{{ request.GET.urlencode }}&delete=1"> 添加delete </a>
来源:https://www.cnblogs.com/andy-linux/p/6775006.html