20 模版

模版的功能:

产生html,控制页面上展示的内容。不仅仅是一个html文件

包含两部分内容:

1、静态内容:css,js,html

2、动态内容:通过模版语言动态产生一些网页内容

 

模版变量:

模版变量由数字、字母、下划线和点组成,不能以下划线开头。使用模版变量:{{ 变量名 }}

如果变量中有点,点前面的可能是一个字典、列表或者对象:

{{ book.btitle }}解析顺序:

1、先将book当作一个字典,btitle当成一个键名来解析

2、将book当作一个对象,btitle当一个属性来解析

3、将book当作一个对象,btitle当成一个方法

如果还找不到,将使用一个空字符串填充变量名

另外一种:{{ book.0 }}:

1、将book当一个字典,0为键名

2、将book当一个列表,0为下标:book[0]

如果匹配不是,传空字符串

 

模版标签:

{% 代码段 %}

 

{% for x in list %}

{% endfor %}

 

{% empty %} :列表不为空时执行。。

 

{% forloop.counter %} 可以获取for循环的次数,从1开始计数:

 

<ul>
    {% for book in books %}
    <li>{% forloop.counter %}--{% book.btitle %}</li>
</ul>

 

 

{%  if 条件 %}

{% elif 条件 %}

{% else %}

{% endif %}

关系比较操作符:> < >= <= == !=

注意⚠️:进行比较操作时,比较操作符两边必须有空格

逻辑运算符:not and or

 

过滤器

用于对模版变量进行操作

比如date就是一个过滤器,用于改变日期的显示格式

格式:模版变量 |过滤器:参数

例:{{ book.bpub | date:'Y年-m月-d日' }}

default也是一个过滤器:如果value为false,则使用给出的默认值,否则使用该value

{{ value |default:'something'}}  :如果value为空字符串,则输出“something”

 

自定义过滤器:

在Django项目下新建一个python包:templatetags 【一个字母都不能错】

在其下可以新建一个xx.Py文件,然后自定义过滤器【python函数】

注意:自定义过滤器,最少有一个参数(使用时不用传参,|前面的就是参数),最多有两个参数,使用时需要传一个参数

from django.tempalte import Library

xxx = Library()

@xxx.filter
def mod(num):

    '''判断num是否为偶数'''

    return num%2 == 0 

使用过滤器:

{% load xx%}  #导入自定义的过滤器,就是templatetags下的python文件名

{% for book in books %}
{% if book.id|mod %} # 竖线前面的‘id’会作为参数传递给mod,如果有两个参数,则需要在后门传参:{% if book.id|mod:参数 %}
    ......
{% endif %}
{% endfor %}

 

更多过滤器参见Django手册

 

 

模版注释

单行注释:{#  ...   #}

多行注释:

{% comment %}

...

{% endcomment %}

 

 

模版继承

创建一个模版文件作为父模版:例如叫:base.html,此文件里面有导航条和版权信息,其它模版文件都继承base.html【都包含导航条和版权信息】

在子模板中,删除全部内容,加上这一句:

{% extends 'booktest/base.html' %}

子模版就继承了所有base.html中的内容。

注意⚠️:子模板中的内容要全部删掉。那么除了版权信息和导航条之外的其它内容怎么办?

答:在父模版中预留位置,叫做‘预留块’,子模版可以重写预留块中的内容

{% block 块名 %}

...中间可以写内容,也可以不写,子模版可以对块重写

{% endblock 块名%}

子模版如何重写:

{% block 块名%}

...重写内容

{% endblock 块名 %}

ps: 获取父模版中块的内容:

{% block 块名%}

这是此块中原来的内容: {{ block.super }} 

<h1>这是重写的内容</h1>

{% endblock 块名%} 

 

HTML转义

通过模版上下文中传递给模版文件的数据里面含有下面的内容,会被转义:

模版上下文,就是通过视图views.py中的函数传递给模版文件的变量

< 转为 &lt;

> 转为 &gt;

' 转为 &#39;

" 转为 &quot;

& 转为 &amp;

要关闭转义,比如想要传递一段html代码,就需要关闭转义。

1、使用过滤器:safe  

{{ 模版变量| safe}}

这个适用于关闭一个变量的转义

2、使用标签:

{%  autoescape off%} #off 表示关闭转义,on就是打开。默认是打开的

...

{%  endautoescape %}

这个适用于关闭很多变量的转义,在标签中间的代码全部关闭。

 

模版硬编码中的字符串默认不经过转义。什么是硬编码?

模版中写死的部分,比如:

{{content|default:"<h1>hello</h1"}}

如果conetent没有值,就获取default的值“<h1>hello</h1>”,它默认不经过转义,所以显示一个标题hello

如果要把它当初字符串显示,需要手动转义:

{{content|default:"&lt;h1&gt;hello&lt;/h1&gt;"}}

 

posted @ 2019-08-20 02:27  greenfan  阅读(114)  评论(0)    收藏  举报