前言: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. iis 如何设置http访问转向https

    把网站设置成https后,发现在浏览器输入域名后,并不能所期望的看到成功访问页面,在输入如:http://www.alipay.com后浏览器自动导航到https://www.alipay.com. ...

  2. 【Java并发编程】:深入Java内存模型——happen-before规则及其对DCL的分析

    happen—before规则介绍 Java语言中有一个“先行发生”(happen—before)的规则,它是Java内存模型中定义的两项操作之间的偏序关系,如果操作A先行发生于操作B,其意思就是说, ...

  3. 【数组】Jump Game

    题目: Given an array of non-negative integers, you are initially positioned at the first index of the ...

  4. SourceTree跳过Atlassian账号,免登陆,跳过初始设置

    SourceTree 安装之后需要使用账号登陆以授权,并且是强制登陆. 登录过程非常漫长,并未在不FQ的情况下是不能成功的,下面记录一下跳过登录的方法. 装之后,转到用户本地文件夹下的 SourceT ...

  5. CSS学习笔记(基础篇)

    CSS概念 CSS 指层叠样式表 (Cascading Style Sheets)(级联样式表) Css是用来美化html标签的,相当于页面化妆. 样式表书写位置: <head> < ...

  6. js便签笔记(4)——简单说说getAttributeNode()和setAttributeNode()

    1.前言: 前两天写过一片<分析dom元素的特性Attribute和属性Property>,分析了特性和属性的区别.那篇文章却忽略了一个主要知识点——getAttributeNode()和 ...

  7. Linux-(tar,gzip,df,du)

    tar命令 首先要弄清两个概念:打包和压缩.打包是指将一大堆文件或目录变成一个总的文件:压缩则是将一个大的文件通过一些压缩算法变成一个小文件. 为什么要区分这两个概念呢?这源于Linux中很多压缩程序 ...

  8. SpringMVC异常处理机制

    SpringMVC异常处理机制 springMVC会将所有在doDispatch方法中的异常捕获,然后处理.无法处理的异常会抛出给容器处理. 在doDispatch()中调用processDispat ...

  9. PL/SOL csv格式导出查询结果时出现某些列的数据被四舍五入了的解决办法

    昨天用pl/sql从oracle数据库捞取数据时,发现导出的csv格式中某些列的数据被进行了四舍五入处理了,当然这些列都是纯数字的,百思不得其解,后来上网才,才得知了原因. 这并不是导出的CSV文件数 ...

  10. 对于单文本或者div的内容怎么在显示东西过多的情况下实现显示隐藏

    js代码: $(function () { var o = document.getElementById("newsdetail_ArticleContent"); Subt(o ...