Django:模板系统

一,常用语法

只需要记两种特殊符号:

{{  }}和 {% %}

变量相关的用{{}},逻辑相关的用{%%}。

二,常量

{{ 变量名 }}

变量名由字母数字和下划线组成。

点(.)在模板语言中有特殊的含义,用来获取对象的相应属性值。

view中代码

= [11,22,33= {: </span><span style="color: #0000ff"&gt;class</span><span style="color: #000000"&gt; Person(object): </span><span style="color: #0000ff"&gt;def</span> <span style="color: #800080"&gt;__init__</span><span style="color: #000000"&gt;(self,name,age): self.name </span>=<span style="color: #000000"&gt; name self.age </span>=<span style="color: #000000"&gt; age </span><span style="color: #0000ff"&gt;def</span><span style="color: #000000"&gt; dream(self): </span><span style="color: #0000ff"&gt;return</span> <span style="color: #800000"&gt;"</span><span style="color: #800000"&gt;{} is dream...</span><span style="color: #800000"&gt;"</span><span style="color: #000000"&gt;.format(self.name) Alex </span>= Person(name=<span style="color: #800000"&gt;"</span><span style="color: #800000"&gt;Alex</span><span style="color: #800000"&gt;"</span>,age=34<span style="color: #000000"&gt;) Egon </span>= Person(name=<span style="color: #800000"&gt;"</span><span style="color: #800000"&gt;Egon</span><span style="color: #800000"&gt;"</span>,age=9000<span style="color: #000000"&gt;) Eva_J </span>= Person(name=<span style="color: #800000"&gt;"</span><span style="color: #800000"&gt;Eva_J</span><span style="color: #800000"&gt;"</span>,age=18<span style="color: #000000"&gt;) person_list </span>=<span style="color: #000000"&gt; [Alex,Egon,Eva_J] </span><span style="color: #0000ff"&gt;return</span> render(request,<span style="color: #800000"&gt;"</span><span style="color: #800000"&gt;template_test.html</span><span style="color: #800000"&gt;"</span>,{<span style="color: #800000"&gt;"</span><span style="color: #800000"&gt;l</span><span style="color: #800000"&gt;"</span>: l,<span style="color: #800000"&gt;"</span><span style="color: #800000"&gt;d</span><span style="color: #800000"&gt;"</span>: d,<span style="color: #800000"&gt;"</span><span style="color: #800000"&gt;person_list</span><span style="color: #800000"&gt;"</span>: person_list})</pre>

模板中支持的写法:

{ {{ person_list.0.dream }}

三,Filters

语法: {{ value|filter_name:参数 }}

default

{{ value:default: }}

length

{{ value|length }}

'|'左右没有空格没有空格没有空格

返回value的长度,如 value=

filesizeformat

'13 KB', '4.1 MB''102 bytes',等等)。例如:

{{ value|filesizeformat }}

slice

{{value|slice:"2:-1"}}

date

{{ value|date:"Y-m-d H:i:s"}}

safe

Django的模板中会对HTML标签和JS等语法标签进行自动转义,原因显而易见,这样是为了安全。但是有的时候我们可能不希望这些HTML元素被转义,比如我们做一个内容管理系统,后台添加的文章中是经过修饰的,这些修饰可能是通过一个类似于FCKeditor编辑加注了HTML修饰符的文本,如果自动转义的话显示的就是保护HTML标签的源文件。为了在Django中关闭HTML的自动转义有两种方式,如果是一个单独的变量我们可以通过过滤器“|safe”的方式告诉Django这段代码是安全的不必转义。

比如:

value = "点我"

{{ value|safe}}

四,truncatechars

如果字符串字符多于指定的字符数量,那么会被截断。

{{ value|truncatechars:9}}

五,自定义filter

自定义过滤器只是带有一个或两个参数的Python函数:

  • 变量(输入)的值 - -不一定是一个字符串
  • 参数的值 - 这可以有一个默认值,或完全省略

例如,在过滤器{{var | foo:“bar”}}中,过滤器foo将传递变量var和参数“bar”

自定义filter代码文件摆放位置:

app01/ / views.py

编写自定义filter

django =@register.filter(name=<span style="color: #800000">"<span style="color: #800000">cut<span style="color: #800000">"<span style="color: #000000">)
<span style="color: #0000ff">def<span style="color: #000000"> cut(value,arg):
<span style="color: #0000ff">return value.replace(arg,<span style="color: #800000">""<span style="color: #000000">)

@register.filter(name=<span style="color: #800000">"<span style="color: #800000">addSB<span style="color: #800000">"<span style="color: #000000">)
<span style="color: #0000ff">def<span style="color: #000000"> add_sb(value):
<span style="color: #0000ff">return <span style="color: #800000">"<span style="color: #800000">{} SB<span style="color: #800000">".format(value)

使用自定义filter

{# 先导入我们自定义filter那个文件 #} {% load app01_filters %}

{# 使用我们自定义的filter #}
{{ somevariable|cut:"0" }}
{{ d.name|addSB }}

六,Tags

for

    % user user_list %
  • {{ user.name }}
  • % endfor %

for循环可用的一些参数:

for ... empty

复制代码

    {% for user in user_list %}
  • {{ user.name }}
  • {% empty %}
  • 空空如也
  • {% endfor %}
复制代码

复制代码

{% if user_list %}
  用户人数:{{ user_list|length }}
{% elif black_list %}
  黑名单数:{{ black_list|length }}
{% else %}
  没有用户
{% endif %}
复制代码

当然也可以只有if和else

{% if user_list|length > 5 %} 七座豪华SUV {% else %} 黄包车 {% endif %}

if语句支持 and 、or、==、>、<、!=、<=、>=、in、not in、is、is not判断。

with

定义一个中间变量

{% with total=business.employees.count %} {{ total }} employee{{ total|pluralize }} {% endwith %}

七,csrf_token

这个标签用于跨站请求伪造保护。

在页面的form表单里面写上{% csrf_token %}

注释

{# ... #}

八,模板

> > content=> content=> Title% block page-css %{% endblock %<span style="color: #000000">}

这是母板的标题

{% block page-main %<span style="color: #000000">}

{% endblock %<span style="color: #000000">}

母板底部内容

<span style="color: #000000">
{
% block page-js %<span style="color: #000000">}

{% endblock %<span style="color: #000000">}

注意:我们通常会在母板中定义页面专用的CSS块和JS块,方便子页面替换。

九,继承母版

{% extends <span style="color: #800000">'<span style="color: #800000">layouts.html<span style="color: #800000">' %}

十,block块

通过在母板中使用{% block  xxx %}来定义"块"。

在子页面中通过定义母板中的block名来对应替换母板中相应的内容。

{% block page-main %}

世情薄

人情恶

雨送黄昏花易落

{% endblock %}

十一,组件

可以将常用的页面内容如导航条,页尾信息等组件保存在单独的文件中,然后在需要使用的地方按如下语法导入即可。

{% include 'navbar.html' %}

十二,静态文件相关

{% load static %} Hi!

引用JS文件时使用:

{% load static %}