Django的模版系统相关内容

一、常用语法

只需要记两种特殊符号:

{{    }}   与  {%   %}

变量相关的用{{    }}

逻辑相关的用{%    %}

1、变量

{{变量名}}

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

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

views.py中写下以测试代码

from django.shortcuts import render

# Create your views here.

def template_test(request):
    list1=[11,22,33,44]
    dict2={'name':'Monicx'}

    class Person(object):
        def __init__(self,name,age):
            self.name =name
            self.age=age

        def dream(self):
            return " {} is dream...".format(self.name)

    Monicx =Person(name='monicx',age=23)
    Liwenli =Person(name='Liwenli',age=23)
    Xuwenqiang=Person(name='Xuwenqiang',age=21)

    person_list=[Monicx,Liwenli,Xuwenqiang]
    return render(request,'template_test.html',{'list1':list1,'dict2':dict2,'person_list':person_list})

在template_test.html的body中写入以下测试代码:

<body>
{# 取l中的第一个参数 #}
{{ list1.0 }}
<hr>
{# 取字典中key的值 #}
{{ dict2.name }}
<hr>
{# 取对象的name属性 #}
{{ person_list.0.name }}
<hr>
{# .操作只能调用不带参数的方法 #}
{{ person_list.1.dream }}
</body>

查看测试结果:

2、Filters

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

default

{{ value|default:'monicx'}}

如果value没有被传值,默认显示为monicx。切记‘|’的两边没有空格!!!!!

length

{{value|length}}

返回value的长度,如果value是如下列表就显示4。

value=[11,22,33,44]

filesizeformart

{{value|filesizeformat}}

它会将值格式化成一个人可识别的文件大小。如果value是123456789,显示会是117.7MB。

date

格式化时间

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

safe

{{value|safe}}

告诉Django,valeue里面的内容是安全的,关闭HTML的自动转义。

truncatechars

如果字符串字符多于指定的字符数量,会被截断。截断的内容会显示成(...)。

参数:规定达至些字符数时截断。

{{value|truncatechars:200}}

3、自定义filter

app01/
    __init__.py
    models.py
    templatetags/  # 在app01下面新建一个package package
        __init__.py
        app01_filters.py  # 建一个存放自定义filter的文件
    views.py

编写自己定义的filter

from django import template
register = template.Library()


@register.filter(name="tihuan")
def tihuan(value, arg):
    return value.replace(arg, "")


@register.filter(name="addNB")
def add_NB(value):
    return "{} NB".format(value)

使用:

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

{# 使用我们自定义的filter #}
{{ somevariable|tihuan:"monicx" }}
{{ dict2.name|addNB }}

for循环

<ul>
{% for foo in foo_list %}
    ...
{% endfor %}
</ul>

for循环可用的一些参数有:

Variable Description
forloop.counter 当前循环的索引值(从1开始)
forloop.counter0 当前循环的索引值(从0开始)
forloop.revcounter 当前循环的倒序索引值(从1开始)
forloop.revcounter0 当前循环的倒序索引值(从0开始)
forloop.first 当前循环是不是第一次循环(布尔值)
forloop.last 当前循环是不是最后一次循环(布尔值)
forloop.parentloop 本层循环的外层循环

if...empty

<ul>
{% for foo in foo_list %}
    <li>{{ foo.xxx }}</li>
{% empty %}
    <li>列表数据为空时显示的内容</li>
{% endfor %}
</ul>

还有if...else和if...elif...else.

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

csrf_token

这个标签用保护跨站请求,防止伪造的。只要面页面的form里面加上{%csrf_token%}。

注意

1、Django的模板语言中的属性的优先级大于方法

2、Django的模板语言不支持连续的判断。

猜你喜欢

转载自blog.csdn.net/miaoqinian/article/details/80933397
今日推荐