前言:django的模板语法基本和flask的jinja2基本一样。下面比较一下两个模板语法的区别。

------深度变量的查找(万能的句点号)

在 Django 模板中遍历复杂数据结构的关键是句点字符 (.)。

1.模板变量

django:{{  变量  }}    # 因为django只有一个context返回,全部数据都集中在一起

jinja2:{{  对象.变量  }}

2.根据列表的下标获取值

django:{{  列表.0  }}

jinja2:{{  列表[0]  }}

3.根据字典的键获取字典的值

django:{{  字典.key  }}

jinja2:{{  字典[key]  }}或者{{  字典.key  }}

4.for循环时取序号

django:{% for item in 列表 %}{{forloop.counter}}  <1-- 表示当前是第几次循环,从1开始 -->{{forloop.counter0}}  <!-- 表示当前是第几次循环,从0开始 -->{% endfor %}

jinja2:{% for item in 列表 %}{{loop.index}}  <1-- 表示当前是第几次循环,从1开始 -->{{loop.index0}}  <!-- 表示当前是第几次循环,从0开始 -->{% endfor %}

# for遍历字典{{ for key,val in dic.items}}  {{k}} : {{v}}{{ endfor }}<ul>

{% for obj in list %}<li>{{ obj.name }}</li>
{% endfor %}
</ul>#在标签里添加reversed来反序循环列表:
{% for obj in list reversed %}...{% endfor %}#{% for %}标签可以嵌套:
{% for country in countries %}<h1>{{ country.name }}</h1><ul>{% for city in country.city_list %}<li>{{ city }}</li>{% endfor %}</ul>{% endfor %}#系统不支持中断循环,系统也不支持continue语句,{% for %}标签内置了一个forloop模板变量,
#这个变量含有一些属性可以提供给你一些关于循环的信息1,forloop.counter表示循环的次数,它从1开始计数,第一次循环设为1:{% for item in todo_list %}<p>{{ forloop.counter }}: {{ item }}</p>{% endfor %}
2,forloop.counter0 类似于forloop.counter,但它是从0开始计数,第一次循环设为0
3,forloop.revcounter
4,forloop.revcounter0
5,forloop.first当第一次循环时值为True,在特别情况下很有用:{% for object in objects %}   {% if forloop.first %}<li class="first">{% else %}<li>{% endif %}   {{ object }}   </li>  {% endfor %}  # 富有魔力的forloop变量只能在循环中得到,当模板解析器到达{% endfor %}时forloop就消失了
# 如果你的模板context已经包含一个叫forloop的变量,Django会用{% for %}标签替代它
# Django会在for标签的块中覆盖你定义的forloop变量的值
# 在其他非循环的地方,你的forloop变量仍然可用#{% empty %}

{{li }}{%  for i in li %}<li>{{ forloop.counter0 }}----{{ i }}</li>{% empty %}<li>this is empty!</li>{% endfor %}#         [11, 22, 33, 44, 55]
#            0----11
#            1----22
#            2----33
#            3----44
#            4----55

5.列表为空时执行逻辑

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

jinja2:无

6.if语句

{% if num >= 100 and 8 %}{% if num > 200 %}<p>num大于200</p> {% else %} <p>num大于100小于200</p> {% endif %} {% elif num < 100 %} <p>num小于100</p> {% else %} <p>num等于100</p> {% endif %} {% if %} 标签接受and,or或者not来测试多个变量值或者否定一个给定的变量 {% if %} 标签不允许同一标签里同时出现and和or,否则逻辑容易产生歧义,例如下面的标签是不合法的: {% if obj1 and obj2 or obj3 %} 
 

7.过滤器

django:变量|过滤器:参数

jinja2:变量 | 过滤器(参数)    常见的jinja2过滤器:https://www.cnblogs.com/chichung/p/9775099.html

django的常见几个过滤器如下:

  • safe,禁用html转义(显示html标签样式,而不是字符串)
  • 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  add          :   给变量加上相应的值## 2  addslashes   :    给变量中的引号前加上斜线## 3 capfirst : 首字母大写 # # 4 cut : 从字符串中移除指定的字符 # # 5 date : 格式化日期字符串 # # 6 default : 如果值是False,就替换成设置的默认值,否则就是用本来的值 # # 7 default_if_none: 如果值是None,就替换成设置的默认值,否则就使用本来的值 #实例: #value1="aBcDe" {{ value1|upper }}<br> #value2=5 {{ value2|add:3 }}<br> #value3='he llo wo r ld' {{ value3|cut:' ' }}<br> #import datetime #value4=datetime.datetime.now() {{ value4|date:'Y-m-d' }}<br> #value5=[] {{ value5|default:'空的' }}<br> #value6='<a href="#">跳转</a>'  {{ value6 }} {% autoescape off %} {{ value6 }} {% endautoescape %} {{ value6|safe }}<br> {{ value6|striptags }} #value7='1234' {{ value7|filesizeformat }}<br> {{ value7|first }}<br> {{ value7|length }}<br> {{ value7|slice:":-1" }}<br> #value8='http://www.baidu.com/?a=1&b=3' {{ value8|urlencode }}<br> value9='hello I am yuan'

8.多行注释

django:

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

9.对有需要的block进行重写

django:

  • 不用重写父模版中的所有block,如果子模版没有重写,则使用父模版定义的默认值。
  • 可以使用 block.super 来包含父模板的块中定义的内容,如下

{% block 名称 %} 子模板的内容 {{ block.super }} 显示父模板中block的内容 {% endblock %}

{{ block.super }}——引用上级代码块在其基础上进行一些修改

flask:

同样原理,不过用的是{{  super()  }}

10.csrf_token

用于生成csrf_token的标签,用于防治跨站攻击验证。注意如果你在view的index里用的是render_to_response方法,不会生效

其实,这里是会生成一个input标签,和其他表单标签一起提交给后台的。

{% csrf_token %} 放到form中

11.引用路由配置地址 {% url %}

1.urlpatterns = [url(r'^register.html$', register, name="register"),
]2.<form action="{% url "register" %}" ><input type="text"><input type="submit"value="提交">{%csrf_token%}
</form>

12.用更简单的变量名替代复杂的变量名 {% with %}

{% with total=fhjsaldfhjsdfhlasdfhljsdal %} {{ total }} {% endwith %}

13.{% load %}: 加载标签库

    {% load staticfiles %}<script src="{% static 'plugins/jquery.min.js' %}"></script>

14.自定义tag标签

------a、在app中创建templatetags模块(必须的)------b、创建任意 .py 文件,如:my_tags.pyfrom django import template
from django.utils.safestring import mark_saferegister = template.Library()   #register的名字是固定的,不可改变
@register.filter
def filter_multi(v1,v2):return  v1 * v2@register.simple_tag
def simple_tag_multi(v1,v2):return  v1 * v2@register.simple_tag
def my_input(id,arg):result = "<input type='text' id='%s' class='%s' />" %(id,arg,)return mark_safe(result)------c、在使用自定义simple_tag和filter的html文件中导入之前创建的 my_tags.py :{% load my_tags %}------d、使用simple_tag和filter(如何调用)-------------------------------.html
{% load xxx %}   #首行# num=12
{{ num|filter_multi:2 }} #24

{{ num|filter_multi:"[22,333,4444]" }}{% simple_tag_multi 2 5 %}  参数不限,但不能放在if for语句中
{% simple_tag_multi num 5 %}------e、在settings中的INSTALLED_APPS配置当前app,不然django无法找到自定义的simple_tag.注意:filter可以用在if等语句后,simple_tag不可以{% if num|filter_multi:30 > 100 %}{{ num|filter_multi:30 }}
{% endif %}

CP https://www.cnblogs.com/chichung/p/9898017.html

转载于:https://www.cnblogs.com/icemonkey/p/10506574.html

Django 模板语言 标签相关推荐

  1. Django模板语言(译)

    原文地址:https://docs.djangoproject.com/zh-hans/2.1/ref/templates/language/ 翻译日期:2019年3月8日-2019年3月9日 by: ...

  2. Django模板语言相关内容

    Django模板语言相关内容 Django模板系统 官方文档 常用语法 只需要记两种特殊符号: {{  }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 变量 在Django的模板语言 ...

  3. 小白必看!Django 模板语言基础来啦

    作者 | 单雨 责编 | 胡巍巍 出品 | CSDN(ID:CSDNnews) 前言 为了实现模板封装和复用,提高HTML界面调试便捷性以及前后端解耦等目标,Django定义了自己的网络模板语言. 当 ...

  4. Django模板语言 以及使用

    Django 模板语言 文章目录 Django 模板语言 模板的传参 模板的变量 XSS攻击 反射型xss 存储型xss DOM xss 模板的标签 过滤器 模板的继承 url 反向解析 模板的传参 ...

  5. Django模板语言

    常用语法 只需要记两种特殊符号: {{  }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 变量 {{ 变量名 }} 变量名由字母数字和下划线组成. 点(.)在模板语言中有特殊的含义, ...

  6. Django(模板语言-自定义filter和simple_tag)

    filter过滤器的主要形式:变量|函数,意思是将变量交给函数处理,而自定义filter就是自己定义函数,因为用到已有的很少. 1.在当前app中创建templatetags模块(包:带__init_ ...

  7. Django模板语言中的自定义方法filter过滤器实现web网页的瀑布流

    模板语言自定义方法介绍 自定义方法注意事项 Django中有simple_tag 和 filter 两种自定义方法,之前也提到过,需要注意的是 扩展目录名称必须是templatetags templa ...

  8. Django模板语言及视图

    1.Django的模板语言 1.{{ name }} -->变量 2.for循环: {% for i inbook_list %} {{ forloop.counter }} {{ forloo ...

  9. Django模板自定义标签和过滤器,模板继承(extend),Django的模型层

    上回精彩回顾 视图函数:request对象request.path 请求路径request.GET GET请求数据 QueryDict {}request.POST POST请求数据 QueryDic ...

最新文章

  1. 电话连线(最小生成树)
  2. 83. Leetcode 148. 排序链表 (排序)
  3. Java Date 日期 时间 相关方法
  4. 重庆计算机硬件市场主要分布地,重庆市草地资源分布现状及类型特征
  5. canvas画出简陋版随鼠标转动眼睛且会眨眼的可爱樱桃小丸子
  6. [Leetcode][程序员面试金典][面试题17.13][JAVA][恢复空格][动态规划][Trie][字符串哈希]
  7. 原来浏览器原生支持JS Base64编码解码
  8. php简单多态,PHP 对象 多态性 简单图形计算器
  9. everything指定搜索路径
  10. WPE下载 WPE 各版本下载 及 教程
  11. html广告代码自适应,很实用的对联广告代码(自适应高度)
  12. 打开 IBM Rational Rose Enterprise Edition 报错的处理
  13. 数据可视化案例(六)——智慧医院数据可视化
  14. 常用向量相似度衡量指标
  15. java 求指数、对数
  16. Java回炉学习(一)
  17. linux用u盘拷文件损坏,复制到u盘的文件总是损坏怎么办解决?
  18. 关于AI+医疗的调研
  19. erp故障处理流程图_完整ERP流程图
  20. 校赛 问题 F: 传送门(Dijkstra算法)

热门文章

  1. 这是一个沙雕题II(思维好题)
  2. 可汉学院python_可汗学院离线版本
  3. python怎么用matplotlib_Python-如何在matplotlib中更新图?
  4. 深度学习之生成对抗网络(1)博弈学习实例
  5. java xml map 方法_JAVA XML转换MAP 方法
  6. [机器学习] XGBoost参数调优完全指南(附Python代码)
  7. ARM汇编中lr(r14)寄存器的作用
  8. SDI, DVI, HDMI, DisplayPort的区别(Z)
  9. windows下buildbot 的搭建及config文件讲解
  10. 【边缘检测】BDCN:Bi-Directional Cascade Network for Perceptual Edge Detection