Django 模板标签(if for 注释 include)
文章对应的B站视频:https://www.bilibili.com/video/BV1Tu41127Ca/
Django系列文章对应的目录:https://www.cnblogs.com/emanlee/p/15860241.html
if/else 标签
基本语法格式如下:
{% if condition %} ... display {% endif %}
或者:
{% if condition1 %} ... display 1 {% elif condition2 %} ... display 2 {% else %} ... display 3 {% endif %}
根据条件判断是否输出。if/else 支持嵌套。
{% if %} 标签接受 and , or 或者 not 关键字来对多个变量做判断 ,或者对变量取反( not ),例如:
{% if athlete_list and coach_list %} athletes 和 coaches 变量都是可用的。 {% endif %}
mysite456/mysite456/views.py 文件代码:
from django.shortcuts import render
def mydef(request):
views_num = 88
return render(request, "mytemp.html", {"num": views_num})
mysite456/templates/mytemp.html 文件代码:
{%if num > 90 and num <= 100 %}
优秀
{% elif num > 60 and num <= 90 %}
合格
{% else %}
不合格
{% endif %}
再访问访问 http://127.0.0.1:8003/mytemp/,可以看到页面:
for 标签
{% for %} 允许我们在一个序列上迭代。
与 Python 的 for 语句的情形类似,循环语法是 for X in Y ,Y 是要迭代的序列而 X 是在每一个特定的循环中使用的变量名称。
每一次循环中,模板系统会渲染在 {% for %} 和 {% endfor %} 之间的所有内容。
例如,给定一个运动员列表 athlete_list 变量,我们可以使用下面的代码来显示这个列表:
<ul> {% for athlete in athlete_list %} <li>{{ athlete.name }}</li> {% endfor %} </ul>
mysite456/mysite456/views.py 文件代码:
from django.shortcuts import render
def mydef(request):
views_list = ["简单示例demo","简单示例demo1","简单示例demo2","简单示例demo3",]
return render(request, "mytemp.html", {"views_list": views_list})
mysite456/templates/mytemp.html 文件代码:
{% for i in views_list %}
{{ i }}
{% endfor %}
再访问访问 http://127.0.0.1:8003/mytemp/,可以看到页面:
给标签增加一个 reversed 使得该列表被反向迭代:
{% for athlete in athlete_list reversed %}
...
{% endfor %}
mysite456/templates/mytemp.html 文件代码:
{% for i in views_list reversed%}
{{ i }}
{% endfor %}
遍历字典: 可以直接用字典 .items 方法,用变量的解包分别获取键和值。
mysite456/mysite456/views.py 文件代码:
from django.shortcuts import render
def mydef(request):
views_dict = {"name":"简单示例demo","age":18}
return render(request, "mytemp.html", {"views_dict": views_dict})
mysite456/templates/mytemp.html 文件代码:
{% for i,j in views_dict.items %}
{{ i }}---{{ j }}
{% endfor %}
再访问访问 http://127.0.0.1:8003/mytemp/,可以看到页面:
在 {% for %} 标签里可以通过 {{forloop}} 变量获取循环序号。
- forloop.counter: 顺序获取循环序号,从 1 开始计算
- forloop.counter0: 顺序获取循环序号,从 0 开始计算
- forloop.revcounter: 倒序获取循环序号,结尾序号为 1
- forloop.revcounter0: 倒序获取循环序号,结尾序号为 0
- forloop.first(一般配合if标签使用): 第一条数据返回 True,其他数据返回 False
- forloop.last(一般配合if标签使用): 最后一条数据返回 True,其他数据返回 False
mysite456/mysite456/views.py 文件代码:
from django.shortcuts import render
def mydef(request):
views_list = ["a", "b", "c", "d", "e"]
return render(request, "mytemp.html", {"listvar": views_list})
mysite456/templates/mytemp.html 文件代码:
{% for i in listvar %}
{{ forloop.counter }}
{{ forloop.counter0 }}
{{ forloop.revcounter }}
{{ forloop.revcounter0 }}
{{ forloop.first }}
{{ forloop.last }}
{% endfor %}
再访问访问 http://127.0.0.1:8003/mytemp/,可以看到页面:
{% empty %}
可选的 {% empty %} 从句:在循环为空的时候执行(即 in 后面的参数布尔值为 False )。
mysite456/mysite456/views.py 文件代码:
from django.shortcuts import render
def mydef(request):
views_list = []
return render(request, "mytemp.html", {"listvar": views_list})
mysite456/templates/mytemp.html 文件代码:
{% for i in listvar %}
{{ forloop.counter0 }}
{% empty %} Hello
{% endfor %}
再访问访问 http://127.0.0.1:8003/mytemp/,可以看到页面:
可以嵌套使用 {% for %} 标签:
{% for athlete in athlete_list %} <h1>{{ athlete.name }}</h1> <ul> {% for sport in athlete.sports_played %} <li>{{ sport }}</li> {% endfor %} </ul> {% endfor %}
ifequal/ifnotequal 标签
{% ifequal %} 标签比较两个值,当他们相等时,显示在 {% ifequal %} 和 {% endifequal %} 之中所有的值。
下面的例子比较两个模板变量 user 和 currentuser :
{% ifequal user currentuser %} <h1>Welcome!</h1> {% endifequal %}
和 {% if %} 类似, {% ifequal %} 支持可选的 {% else%} 标签:8
{% ifequal section 'sitenews' %} <h1>Site News</h1> {% else %} <h1>No News Here</h1> {% endifequal %}
注释标签
Django 注释使用 {# #}。
{# 这是一个注释 #}
include 标签
{% include %} 标签允许在模板中包含其它的模板的内容。
下面这个例子都包含了 top.html 模板:
{% include "top.html" %}
csrf_token
csrf_token 用于form表单中,作用是跨站请求伪造保护。
如果不用{% csrf_token %}标签,在用 form 表单时,要再次跳转页面会报403权限错误。
用了{% csrf_token %}标签,在 form 表单提交数据时,才会成功。
解析:
首先,向服务器发送请求,获取登录页面,此时中间件 csrf 会自动生成一个隐藏input标签,该标签里的 value 属性的值是一个随机的字符串,用户获取到登录页面的同时也获取到了这个隐藏的input标签。
然后,等用户需要用到form表单提交数据的时候,会携带这个 input 标签一起提交给中间件 csrf,原因是 form 表单提交数据时,会包括所有的 input 标签,中间件 csrf 接收到数据时,会判断,这个随机字符串是不是第一次它发给用户的那个,如果是,则数据提交成功,如果不是,则返回403权限错误。
继续阅读,请看总目录:
Django系列文章对应的目录:https://www.cnblogs.com/emanlee/p/15860241.html
REF
https://www.runoob.com/django/django-template.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
2021-01-28 pip 安装turtle
2019-01-28 Shell 基础知识和总结
2019-01-28 centos7 mail
2015-01-28 数据框排序 data.frame order
2014-01-28 MySQL常用命令
2010-01-28 Data is Null. This method or property cannot be called on Null values.
2008-01-28 SQL Server 字符串函数速查