模板标签的for
forloop.first 是否第一次循环
forloop.last 是否最后一次循环
forloop.counter 标识第几次循环 1 2 3…
forloop.counter0 标识第几次循环 0 1 2 …
forloop.revcounter 逆序的标识
forloop.revcounter0
forloop.parentloop 外层循环
{% if forloop.counter|divisibleby:2 %}even{% else %}odd{% endif %}
更多参考
模板过滤器
变量在输出时,对其进行处理
{{ friend|lower }} <!--变量过滤为小写-->
{{ friend|upper }} <!--过滤为大写-->
{{ age|add:"5"}} <!--给年龄增加5-->
{{ name|truncatechars:"3"}} <!--字符串长度超过3则截断 显示为...-->
code-->'<script>alert('这是一段js代码')</script>'
{{ code }} <!-- 默认转义 为普通的字符,js代码来到前端是不能执行的-->
{{ code|safe }} <!--不转义 如果字串是一段js代码 则可以执行-->
模板的继承
如果模板只有中间的少部分,在变化,如下:
那不变的部分就可以抽出作为父模板,其他的需要使用这部分的页面只需继承 父模板
父模板 base.html
<div>
这是公共的部分Header
</div>
{% block b1 %}
在这里定义可扩展的内容
{% endblock %}
<div>
这是公共的部分Footer
</div>
子模板继承父模板的全部内容,在可扩展模块,扩展自己的内容
应用下的子模板,继承应用下的"appname/base.html"
应用下的子模版,也可继承
根目录下的父模板
根目录下的父模板
根目录下的父模板
url反向解析
在模板、视图中,使用path 中定义的name 参数,动态的查找、计算响应的路由
如:
#urls.py
urlpatterns = [
path("index/",index,name="index_page"), #唯一的名字
]
#在模板中反向解析
<a href = "{% url 'index_page' age=18 %}">反向解析地址</a>
#/index/?age=18
#在视图中反向解析
from django.urls import reverse
url = reverse("index_page",args=[],kwargs={})
模板中:
返回给前端的页面已经是具体的url