【Django05】模板进阶
本节主要介绍Django模板中的循环,条件判断,常用的标签,过滤器的使用
1.列表,字典,类的实例的使用
2.循环:迭代显示列表,字典等中的内容
3.条件判断:判断是否显示该内容,比如判断是手机访问,还是电脑访问,给出不一样的代码。
4.标签:for,if 这样的功能都是标签。
5.过滤器:管道符号后面的功能,比如{{ var|length }},求变量长度的 length 就是一个过滤器。
如果需要将一个或多个变量共享给多个网页或者所有网页使用,比如在网页上显示来访者的IP,这个可以使用 Django 上下文渲染器 来做。
显示一个基本的字符串在网页上
#views.py
from django.shortcuts import render
def home(request):
string = u'****-专业IT技术社区'
return render(request,'home.html',{'string':string})
#home.html
{{ string }}
for循环和list内容
#views.py
from django.shortcuts import render
def home(request):
Universities = ['JHU','Princeton','Harvard','UCB','UCLA','Yale']
return render(request,'home.html',{'U' : Universities})
#home.html
<!DOCTYPE html>
海外知名高校巡礼:<br>
{% for u in U %}
{{ u }}<br>
{% endfor %}
一般的变量使用{{ }}(变量),功能类(如循环、条件判断)使用{% %}(标签)
显示字典中的内容
#views.py
from django.shortcuts import render
def home(request):
infomation = [{'name':'Xu Huan','age':21,'major':'CS'},
{'name':'He shi','age':20,'major':'CS'},
{'name':'Zheng Juntai','age':21,'major':'CS'}]
return render(request,'home.html',{'information' : infomation})
#home.html
<!DOCTYPE html>
{% for i in information%}
name:{{ i.name }}
age:{{ i.age }}
major:{{ i.major}}
<br>
{% endfor %}
在模板中进行条件判断和for循环
#views.py
from django.shortcuts import render
def home(request):
list = map(str, range(100))
return render(request,'home.html',{'list':list})
#home.html
<!DOCTYPE html>
{% for i in list %}
{{ i }} {% 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
<ul>
{% for athlete in athlete_list %}
<li>{{ athlete.name }}</li>
{% empty %}
<li>抱歉,列表为空</li>
{% endfor %}
</ul>
模板上得到视图对应的网址
#views.py
from django.http import HttpResponse
def add(request,a,b):
c = int(a) + int(b)
return HttpResponse(str(c))
#urls.py
path('add/<int:a>/<int:b>',app_test_views.add,name='add')
#add.html
{% url 'add' 4 5 %}
#修改urls.py成
path('pig/<int:a>/<int:b>',app_test_views.add,name='add')
#这时不需要再修改模板,再次访问时网址就会自动变成pig/4/5
模板中的逻辑操作
==, !=, >=, <=, >, < 这些比较都可以在模板中使用
and, or, not, in, not in 也可以在模板中使用
#urls.py中添加
path('verify/<str:a>',app_test_views.verify,name='verify'),
#views.py中添加
def verify(request,a):
return render(request,'verify.html',{'a':a})
#verify.html
<!DOCTYPE html>
{% if a == 'JHU' %}
Welcome to The Johns Hopkins University!
{% elif a == 'UCB' %}
Welcome to University of California Berkeley!
{% elif a == 'Harvard' %}
Welcome to Harvard University!
{% else %}
Sorry, we don't know what you say~
{% endif %}
模板中 获取当前网址,当前用户
#修改settings.py
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
...
'django.template.context_processors.request',
...
],
},
},
]
#使得可以在模板中使用request
#获取当前用户
{{ request.user }}
#获取当前网址
{{ request.path }}
#获取当前GET参数
{{ request.GET urlencode }}