官方文档 | Django教程
一、概述:
1.1、模板由两部分组成: HTML代码 逻辑控制代码
1.2、作用: 快速生成HTML页面
1.3、优点: 模板的设计实现了业务逻辑与现实内容的分离 ; 视图可以使用任何模板
1.4、模板处理 : 加载 ; 渲染
二、常用语法
2.1、只需要记两种特殊符号:
{{ }}和 {% %} , 变量相关的用{{}},逻辑相关的用{%%}。
2.2、 逻辑相关:
2.2.1. if判断
{% if a > b %}
{% endif %}
{% if a > b %}
{% else %}
{% endif %}
{% if a > b %}
{% elif %}
{% else %}
{% endif %}
2.2.2. for循环
1. for循环的基本用法
{% for i in name_list %}
{{ i }}
{% endfor %}
{% for i in name_list %}
{{ i }}
{% empty %}
空空如也
{% endfor %}
2. for循环可用的属性:
forloop.counter
forloop.counter0
forloop.revcounter
forloop.revcounter0
forloop.first
forloop.last
2.3、过滤器 (filters)
2.3.1、语法:在Django的模板语言中,通过使用 过滤器 来改变变量的显示。过滤器的语法: {{ value|filter_name:参数 }}。使用管道符"|"来应用过滤器。
2.3.2、作用
在变量被显示前修改它
2.3.3、过滤器可以传递参数,参数用引号引起来:join
格式:列表 | join:'#' 示例:
<h1>{{ list|join:'#' }}</h1>
2.3.4、如果一个变量没有被提供,或者值为false、空,可以使用默认值 default
格式:{{var|default:'good'}}
示例:<h1>{{test|default:'没有'}}</h1>
2.3.5、根据给定格式转换日期为字符串 :date
格式:{{dataVal|date:'y-m-d'}}
2.3.6、
{#加减乘除#}
<h1>num={{ num }}</h1>
<h1>num={{ num|add:10 }}</h1>
<h1>num={{ num|add:-5 }}</h1>
<h1>num={% widthratio num 1 5 %}</h1>
<h1>num={% widthratio num 5 1 %}</h1>
2.3.7、注释
{#单行注释#}
三、模板继承
3.1、作用 : 模板继承可以减少页面的内容的重复定义,实现页面的重用
3.2、block标签:在父模板中预留区域,字模板去填充
语法:{%block 标签名 %}
{%endblock 标签名%}
3.3、extends标签: 继承模板,需要写在模板文件的第一行(必须)
语法:{%extends '父模板路径'%}
3.4、定义父模板
定义子模板
3.5、以下是使用模板继承的一些诀窍:
如果在模板中使用 {% extends %} ,必须保证其为模板中的第一个模板标记。 否则,模板继承将不起作用。
一般来说,基础模板中的 {% block %} 标签越多越好。 记住,子模板不必定义父模板中所有的代码块,因此你可以用合理的缺省值对一些代码块进行填充,然后只对子模板所需的代码块进行(重)定义。 俗话说,钩子越多越好。
如果发觉自己在多个模板之间拷贝代码,你应该考虑将该代码段放置到父模板的某个 {% block %} 中。
如果你需要访问父模板中的块的内容,使用 {{ block.super }}这个标签吧,这一个魔法变量将会表现出父模板中的内容。 如果只想在上级代码块基础上添加内容,而不是全部重载,该变量就显得非常有用了。
不允许在同一个模板中定义多个同名的 {% block %} 。 存在这样的限制是因为block 标签的工作方式是双向的。 也就是说,block 标签不仅挖了一个要填的坑,也定义了在父模板中这个坑所填充的内容。如果模板中出现了两个相同名称的 {% block %} 标签,父模板将无从得知要使用哪个块的内容。
{% extends %} 对所传入模板名称使用的加载方法和 get_template() 相同。 也就是说,会将模板名称被添加到 TEMPLATE_DIRS 设置之后。
多数情况下, {% extends %} 的参数应该是字符串,但是如果直到运行时方能确定父模板名,这个参数也可以是个变量。 这使得你能够实现一些很酷的动态功能。
四、组件
4.1、可以将常用的页面内容如导航条,页尾信息等组件保存在单独的文件中,然后在需要使用的地方按如下语法导入即可。
{% include 'navbar.html' %}
五、CSRF
跨站请求伪造。某些恶意网站包括链接,表单、按钮、js利用登录用户在浏览器中认证,从而攻击服务
在settings.py中的MIDDLEWARE增加‘django.middleware.csrf.CsrfViewMiddleware’