前言: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.py

from django import template
from django.utils.safestring import mark_safe register = 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 }} # {{ 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

Django 模板语言 标签的更多相关文章

  1. Django模板语言 标签整理

    Django模板语言 标签 内置标签引用 1. autoescape 控制自动转义是否可用. 这种标签带有任何 on 或 off 作为参数的话,他将决定转义块内效果. 该标签会以一个endautoes ...

  2. Django模板语言,标签整理

    Django模板语言 标签 内置标签引用 1. autoescape 控制自动转义是否可用. 这种标签带有任何 on 或 off 作为参数的话,他将决定转义块内效果. 该标签会以一个endautoes ...

  3. Django模板语言初识

    一.Django框架简介 1.MVC框架 MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控 ...

  4. Django模板语言的复用

    一.include标签 由于在项目中,往往会出现多个页面拥有一个或几个相同的页面版块,或是一个页面多个页面版块是相同的,基于这个问题,我们可以采用模板语言复用include标签来帮我们解决,这样就避免 ...

  5. Django模板语言相关内容 Djan

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

  6. Django——模板语言相关内容

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

  7. Django 模板语言 路由 视图

    . 模板语言(字符串替换) . 母版和继承 . 什么时候用母版? html页面有重复的代码,把它们提取出来放到一个单独的html文件. (比如:导航条和左侧菜单) . 子页面如何使用母版? {% ex ...

  8. django模板语言的注释

    就像HTML或者Python,Django模板语言同样提供代码注释. 注释使用 {# #} : ? 1 {# This is a comment #} 注释的内容不会在模板渲染时输出. 用这种语法的注 ...

  9. Django模板语言(常用语法规则)

    Django模板语言 The Django template language 模板中常用的语法规则 {最新版本的Django语法可能有改变,不支持的操作可能支持了.[HTML教程 - 基本元素/标签 ...

随机推荐

  1. Func<T,TResult>的使用方法(转载)

    public delegate TResult Func <T, TResult>(T arg) 这是一个委托方法,这个方法有一个参数T(T arg),比如int arg,string a ...

  2. EJB3 阶段总结+一个EJB3案例 (1)

    经过一段时时间的学习,对EJB3的相关知识和jboss8的配置有了大概的了解. 网上对EJB的评论很多,基本都是负面的,都表示EJB太过于沉重,不容易维护.但通过这段时间的学习,私下认为,EJB3在某 ...

  3. jdbc调试sql语句方法

    在main命令行输入三个参数到oracle 的 dept2表(自己建的 和dept一样(deptno,dname,loc)),插入到数据库中去.通过本例子,学习在java里调试sql的方法. 写完sq ...

  4. Hive use mapreduce引擎 bsonFile splits报错处理

    Hive use mapreduce引擎 1.          出现报错.关于bsonFile的.禁止hdfs里面存储的bson文件自动splits. 可以在hive-site.xml文件里面添加如 ...

  5. Kaggle(一):房价预测

    Kaggle(一) 房价预测 (随机森林.岭回归.集成学习)  项目介绍:通过79个解释变量描述爱荷华州艾姆斯的住宅的各个方面,然后通过这些变量训练模型, 来预测房价.   kaggle项目链接:ht ...

  6. Prim算法和Kruskal算法求最小生成树

    Prim算法 连通分量是指图的一个子图,子图中任意两个顶点之间都是可达的.最小生成树是连通图的一个连通分量,且所有边的权值和最小. 最小生成树中,一个顶点最多与两个顶点邻接:若连通图有n个顶点,则最小 ...

  7. 详解REST架构风格

    编辑推荐: 本文来自于segmentfault.com,一起了解REST的内在,认识REST的优势,而不再将它当作是“理所当然” 引言 作为Web开发者,你可能或多或少了解一些REST的知识,甚至已经 ...

  8. Ionic APP 热更新

    开门见山,本文主题:cordova-hot-code-push 作用:cordova热更新插件,提供了在应用程序中对基于Web的内容进行自动更新的功能. GitHub地址:https://github ...

  9. .Net调用Java端带有WS-Security支持的Web Service【亲测通过】

    做了几年的开发,今天终于鼓起勇气开通了博客园.平时都是找各种大牛,看他们的分享博客的解决BUG.从今天起,我也开始分享我学习之路.还望大家多多支持! 最近收到一个采用Axis2实现的WebServic ...

  10. 设计模式学习--面向对象的5条设计原则之依赖倒置原则--DIP

    一.DIP简介(DIP--Dependency Inversion Principle): 1.高层模块不应该依赖于低层模块,二者都应该依赖于抽象.2.抽象不应该依赖于细节,细节应该依赖于抽象.   ...