28. Django 2.1.7 模板语言 - 变量、标签、过滤器、自定义过滤器、模板注释

网友投稿 769 2022-11-21

28. Django 2.1.7 模板语言 - 变量、标签、过滤器、自定义过滤器、模板注释

28. Django 2.1.7 模板语言 - 变量、标签、过滤器、自定义过滤器、模板注释

参考文献

​​接下来逐个介绍4种类型。

模板变量

模板变量的作用是计算并输出,变量名必须由字母、数字、下划线(不能以下划线开头)和点组成。

语法如下:

{{变量}}

现在来看看前面篇章中写到的模板遍历代码如下:

{% for value in info.m_query %} {{ value.id }} {{ info.server_name }} {{ value.name }} {{ value.port }} 删除 {% endfor %}

当模版引擎遇到点如info.m_query,会按照下列顺序解析:

字典info['m_query']先属性后方法,将info当作对象,查找属性m_query,如果没有再查找方法m_query()如果是格式为info.0则解析为列表info[0]

 如果变量不存在则插入空字符串。 ”

在模板中调用方法时不能传递参数。

示例

1)打开assetinfo/views.py文件,创建视图temp_var。

def temp_var(request): dict={'title':'字典键值'} # 查询所有服务器的信息 server_list = ServerInfo.objects.all() context={'dict':dict,'server_list':server_list} return render(request,'assetinfo/temp_var.html',context)

2)打开assetinfo/urls.py文件,配置url。

urlpatterns = [ # ex:/assetinfo/temp_var path('temp_var', views.temp_var),...]

3)修改在templates/assetinfo下创建temp_var.html。

Title 模板变量:
{{dict.title}}
{% for server in server_list %} {{ forloop.counter }} -- {{ server.server_hostname }}
{% endfor %}

4)运行服务器,在浏览器中输入如下网址。

item in 列表%}循环逻辑{{forloop.counter}}表示当前是第几次循环,从1开始{%empty%}列表为空或不存在时执行此逻辑{%endfor%}

if标签语法如下:

{%if ...%}逻辑1{%elif ...%}逻辑2{%else%}逻辑3{%endif%}

比较运算符如下:

 注意:运算符左右两侧不能紧挨变量或常量,必须有空格。 ”

==!=<><=>=

布尔运算符如下:

andornot

示例

1)打开assetinfo/views.py文件,创建视图temp_tag。

def temp_tags(request): context={'list':ServerInfo.objects.all()} return render(request,'assetinfo/temp_tag.html',context)

2)打开assetinfo/urls.py文件,配置url。

urlpatterns = [# ex:/assetinfo/temp_tags path('temp_tags', views.temp_tags),]

3)在templates/assetinfo下创建temp_tag.html。

Title

    {%for item in list%} {%if item.id <= 2%}
  • {{item.server_hostname}}
  • {%elif item.id <= 3%}
  • {{item.server_hostname}}
  • {%else%}
  • {{item.server_hostname}}
  • {%endif%} {%empty%}
  • 对不起,没有服务器
  • {%endfor%}

4)运行服务器,在浏览器中输入如下网址。

来应用过滤器,用于进行计算、转换操作,可以使用在变量、标签中。如果过滤器需要参数,则使用冒号​​:​​传递参数。

变量|过滤器:参数

长度length,返回字符串包含字符的个数,或列表、元组、字典的元素个数。

默认值default,如果变量不存在时则返回默认值。

data|default:'默认值'

日期date,用于对日期类型的值进行字符串格式化,常用的格式化字符如下:

Y表示年,格式为4位,y表示两位的年。m表示月,格式为01,02,12等。d表示日, 格式为01,02等。j表示日,格式为1,2等。H表示时,24进制,h表示12进制的时。i表示分,为0-59。s表示秒,为0-59。

value|date:"Y年m月j日 H时i分s秒"

示例

1)打开assetinfo/views.py文件,创建视图temp_filter。

def temp_filter(request): context={'list':ServerInfo.objects.all()} return render(request,'assetinfo/temp_filter.html',context)

2)打开assetinfo/urls.py文件,配置url。

urlpatterns = [ # ex:/assetinfo/temp_filter path('temp_filter', views.temp_filter),]

3)在templates/assetinfo下创建temp_filter.html。

Title

    {%for item in list%} {%if item.server_hostname|length > 4%}
  • {{item.server_hostname}} ---默认时间格式为: {{item.server_shelves_date}}
  • {%elif item.server_hostname|length < 2%}
  • {{item.server_hostname}} ---默认时间格式为: {{item.server_shelves_date}}
  • {%else%}
  • {{item.server_hostname}} ---格式化时间为: {{item.server_shelves_date|date:"Y-m-j"}}
  • {%endif%} {% empty %}
  • 对不起,没有服务器
  • {%endfor%}

4)运行服务器,在浏览器中输入如下网址。

django.template import Library#创建一个Library类对象register=Library()#使用装饰器进行注册@register.filter#定义求余函数mod,将value对2求余def mod(value): return value%2 == 0

3)在templates/assetinfo/temp_filter.html中,使用自定义过滤器。

首先使用load标签引入模块。

{%load filters%}

在遍历时根据编号判断奇偶,代码改为如下:

{%load filters%} Title

    {%for item in list%} {%if item.id|mod == 1%}
  • {{ item.id|mod }} {{item.server_hostname}} ---默认时间格式为: {{item.server_shelves_date}}
  • {%else%}
  • {{ item.id|mod }} {{item.server_hostname}} ---格式化时间为: {{item.server_shelves_date|date:"Y-m-j"}}
  • {%endif%} {% empty %}
  • 对不起,没有服务器
  • {%endfor%}

4)运行服务器,浏览效果如下:

过滤器可以接收参数,将assetinfo/templatetags/filters.py中增加mod_num函数。

#使用装饰器进行注册@register.filter#定义求余函数mod_num,将value对num求余def mod_num(value,num): return value%num

5)在templates/assetinfo/temp_filter.html中修改遍历时判断代码。

{%if item.id|mod_num:3 %}

6)运行服务器,浏览效果如下:

注释

在模板中使用如下模板注释,这段代码不会被编译,不会输出到客户端;html注释只能注释html内容,不能注释模板语言。

1)单行注释语法如下:

{#...#}

注释可以包含任何模版代码,有效的或者无效的都可以。

{# { % if foo % }bar{ % else % } #}

2)多行注释使用comment标签,语法如下:

{%comment%}...{%endcomment%}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:1. Centos7下使用 nvm 安装 nodejs 环境
下一篇:27. Vue 使用 vue-resource 发起get请求,获取列表数据
相关文章

 发表评论

暂时没有评论,来抢沙发吧~