这节主要讲 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>