Django模板语言

官方文档 | 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’

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值