Django模板

  • 前面用到的模板语言
    https://www.cnblogs.com/liwenzhou/p/7931828.html
{{ name }}  => 变量

# for循环判断
{%   for i in book_list  %}
     {{  forloop.counter }}
     ...
{% endfor %}

#if...else判断
{% if 10>5 %}
  ...
{% else %}
  ...
{% endif %}

#判断模块
{%  if name in name_list %}
   ...
{% endif  %}

{{ }} 变量相关 {% %}逻辑相关

点(.)在模板语言中有特殊的含义。当模版系统遇到点("."),它将以这样的顺序查询:

字典查询(Dictionary lookup) 
属性或方法查询(Attribute or method lookup)
数字索引查询(Numeric index lookup)

⚠️
1. 如果计算结果的值是可调用的,它将被无参数的调用。 调用的结果将成为模版的值。
2. 如果使用的变量不存在, 模版系统将插入 string_if_invalid 选项的值, 它被默认设置为'' (空字符串) 。

  • 过滤器
在Django的模板语言中,通过使用 过滤器 来改变变量的显示。
过滤器的语法: {{ value|filter_name:参数 }}
使用管道符"|"来应用过滤器。

例如:{{ name|lower }}会将name变量应用lower过滤器之后再显示它的值。lower在这里的作用是将文本全都变成小写。

常见的过滤器

#  如果一个变量是false或者为空,使用给定的默认值。 否则,使用变量的值。
{{ value | default : "test"}}

#返回值的长度,作用于字符串和列表。
{{ value|length }}

# 显示日期
from datetime import datetime
now = datetime.now()

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

# 如果字符串字符多于指定的字符数量,那么会被截断。截断的字符串将以可翻译的省略号序列(“...”)结尾。参数:截断的字符数
{{ value|truncatechars:9}}

自定义的过滤器

step1: 新建对应的filter目录  => templatetags

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

step 2: 编写过滤器的逻辑

# encoding: utf-8
from django import template   
register = template.Library()
# 前面两行基本配置文件

# 模板语言的注册
@register.filter(name="sb")
def add_sb(arg):
    return "{} sb.".format(arg)

# 含有两个参数的模板
# 要传入三个参数或者更多见Django静态文件部分
@register.filter(name="addstr" )
def add_str(arg, arg2):
    return "{} {}".format(arg,arg2)

step 3: 模板调用

模板的调用  => 调用的时候注意,服务器需要重新启动
{% load myfilter %}
{{ a|sb }}

# 主要中间没有空格
{{ a|addstr:"afsdfsd"}}
  • tags标签
# 当前循环的索引值(从1开始)
forloop.counter  

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

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

你可能感兴趣的:(Django模板)