Django模版系统

一 、常用语法:

  1:{{ }} 表示变量操作,在模版渲染的时候替换成值

  2:{% %} 表示逻辑相关的操作

二、变量操作:

  1:变量由字母数字和下划线组成

  2:模版中支持的写法

{# 取l中的第一个参数 #}
{{ l.0 }}
{# 取字典中key的值 #}
{{ d.name }}
{# 取对象的name属性 #}
{{ person_list.0.name }}
{# .操作只能调用不带参数的方法 #}
{{ person_list.0.dream }}

注:当模版系统遇到一个(.)时,会按照如下的顺序去查询

  1、在字典中查询

  2、属性或者方法的查询

  3、数字索引

Filters:过滤器

  用来修改变量的显示结果

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

  “|”左右没有空格

  1)default

  {{ value|default:"nothing"}} : 如果value值没传的话就显示nothing

  2)filesizeformat

  将值格式化为一个‘人类可读的“文件尺寸”’(例如‘13kb,4.1mb,‘100bytes’’等等)

  例如:{{ value|filesizeformat }} 如果value是123456789,输出将会是117.7mb

  3)add

  给变量加参数

  {{ value|add:"2" }}:value是数字4,则输出的结果为6

  {{ first|add:second }}:如果first是[1,2,3],second是[4,5,6],那输出的结果是[1,2,3,4,5,6]

  4)lower

  {{ value|lower }} 小写

  5)upper

  {{ value|upper}}大写

  6)title

  {{ value|title }}标题

  7)ljust

  {{ value|ljust:"10" }}左对齐

  8)rjust

  {{ value|rjust:"10" }}右对齐

  9)center

  {{ value|center:"15" }}居中

  10)length

  {{ value|length }}返回value的长度,如value=['a','b','c']的话,就显示4

  11)slice

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

  12)first

  {{ value|first }}取第一个元素

  13)last

  {{ value|last }}取最后一个元素

  14)join

  {{ value|join:" // " }}使用字符串拼接列表

  15)truncatechars

  {{ value|truncatechars:9}}如果字符串字符多于指定的字符数量,那么会被截断。

  16)date

  {{ value|date:"Y-m-d H:i:s"}}日期格式化

  17)safe

  {{ value|safe}}

  value = "<a href='#'>点我</a>"

  通过过滤器‘safe|safe’的方式告诉django这段代码是安全的不必转义

自定义filter

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

  变量(输入)的值不一定是一个字符串

  参数的值——可以有一个默认值,或完全省略

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

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

  编写自定义filter 

from django import template
register = template.Library()


@register.filter
def fill(value, arg):
    return value.replace(" ", arg)


@register.filter(name="addSB")
def add_sb(value):
    return "{} SB".format(value)

  使用自定义filter

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

  {% load app01_filters %}

  {# 使用我们自定义的filter #}

  {{ somevariable|fill:"__" }}

  {{ d.name|addSB }}

tags

 for  

<ul>
{% for user in user_list %}
    <li>{{ user.name }}</li>
{% endfor %}
</ul>

  for循环可用的一些参数

  1)forloop.counter  当前循环的索引值(从1开始)

  2)forloop.counter0  当前循环的索引值(从0开始)

  3)forloop.revcounter  当前循环的倒序索引值(到1结束)

  4)forloop.revcounter0  当前循环的倒序索引值(到0结束)

  5)forloop.first  判断当前循环是不是第一次循环(布尔值)

  6)forloop.last  判断当前循环是不是最后一次循环(布尔值)

  7)forloop。parentloop  本层循环的外层循环

  for...empty 

<ul>
{% for user in user_list %}
    <li>{{ user.name }}</li>
{% empty %}
    <li>空空如也</li>
{% endfor %}
</ul>

  if,elif和else  

{% if user_list %}
  用户人数:{{ user_list|length }}
{% elif black_list %}
  黑名单数:{{ black_list|length }}
{% 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%}

  注意事项

  1)django的模版语言不支持连续判断,即不支持一下写法: 

{% if a > b > c %}
...
{% endif %}

  2)django的模版语言中属性的优先级大于方法  

def xx(request):
    d = {"a": 1, "b": 2, "c": 3, "items": "100"}
    return render(request, "xx.html", {"data": d})

  如上:在使用render方法渲染一个页面的时候,传的字典的有一个key是itens并且还有默认的ditems()方法,此时在模版语言中:

  {{ data.items }} 默认会取到items key的值

    

  

  

原文地址:https://www.cnblogs.com/wangjian941118/p/9761439.html