模板标签
一、模板标签
标签在渲染的过程中提供任意的逻辑
其实对于上述概念理解起来较为困难,这个定义是刻意模糊的。 例如,一个标签可以输出内容,作为控制结构,例如“if”语句或“for”循环从数据库中提取内容,甚至可以访问其他的模板标签。
标签语法: 由%}和 {% 来定义的,例如:{%tag%} {%endtag%}
现在传一个字符串、一个列表、一段HTML进去
return render(request,'book/index.html',context = {'name':'django','mylist':['python','django','tornado'],'html':'<b>I AM A BIG BOY !!</b>'})
if
{% if name == 'python' %}
这是python的页面
{% elif name == 'django' %}
这是django的页面
{% else %}
其他
for
{% for foo in mylist %} {% if forloop.counter == 1 %} <li>这是第一个值:{{ foo }}</li> {% else %} <li>{{ foo }}</li> {% endif %} {% endfor %}
URL页面转换
urlpatterns = [ path('test/',views.test,name='test'), path('test1/<int:id>',views.test1,name='test1'), path('index/',views.index), ]
<a href="https://www.cnblogs.com/chancey/">转到素心的博客</a> <br> <a href="{% url 'test' %}">转到book的测试页</a> <br> <a href="{% url 'test1' 18 %}">转到加参的测试页</a>
值得注意的是,模板中的URL后边缀的是urls.py中的name值
WITH
用来临时更改变量名,使得长且复杂的变量名变得临时简单
原来的name:{{ name }}<br> {% with name as n %} 临时更改:{{ n }}<br> {% endwith %}
AUTOESCAPE
取消自动转义
原始的HTML:{{ html }}<br> 过滤器方式:{{ html | safe }}<br> 标签的方式: {% autoescape off %} {{ html }} {% endautoescape %}
常用的标签
二、模板继承
Django模版引擎中最强大也是最复杂的部分就是模版继承了。 模版继承可以让你创建一个基本的“骨架”模版,它包含您站点中的全部元素,并且可以定义能够被子模版覆盖的 blocks
创建三个模板文件
base.html 这个作为模板继承页
indexxxx.html 在这个模板中实现继承和引用
ss.html 这个作为模板的引用页
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>{% block title %}默认标题 {% endblock %}</title> </head> <body> {% block content %} 默认内容 {% endblock %} {% block demo %} 默认演示 {% endblock %} </body> </html>
{% extends 'book/base.html' %} {% block title %} Chancey主页 {% endblock %} {% block content %} 通过block.super继承父类:{{ block.super }}<br> 子模板自己的内容,没有写就不会显示<br> {% endblock %} {% block demo %} 通过include引用其他模板的内容:{% include 'book/ss.html' %} {% endblock %}
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>内容</title> </head> <body> 菜鸟程序员,Chancey(别名:素心) </body> </html>
模板语法:
继承语法 {% extends 'book/base.html' %}
重写语法 {% block title %} 需要重写的内容 {% endblock %}
新增语法 {{ block.super }} 要新增的内容 //值得注意的是,该语法写在block里面
引用:
include 如果需要模板来填充子模版的某一块内容,则使用它是最简便的方法
语法: {% include 'book/ss.html' %}
模板继承小结:
模板继承使用extends标签实现。通过使用block来给子模板开放接口。
- extends必须是模板中的第一个出现的标签。
- 子模板中的所有内容,必须出现在父模板定义好的block中,否则django将不会渲染。
- 如果出现重复代码,就应该考虑使用模板。
- 尽可能多的定义block,方便子模板实现更细的需求。
- 如果在某个block中,要使用父模板的内容,使用block.super获取。