Django 模板语言 标签

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/248379.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电子书下载:Illustrated C# 2012 4th

下载&#xff1a;http://www.ctdisk.com/file/9015906转载于:https://www.cnblogs.com/MaxWoods/archive/2012/08/26/2657752.html

关于83版射雕英雄传

今天无意中看到网上一群人关于83版射雕的一些争论.或许一些现在的年轻人不喜欢83版射雕,说那太老土了,但想想那个时代的条件,能拍出这样的片子,是非常不错的,而且我觉得83版射雕也是最忠于原著的,跟后来的翻版比较,虽然从画面效果,人物服装方面存在差距,但这都是由于历史原因和…

ZOJ 3735 Josephina and RPG

思路&#xff1a;dp[i][j]:第i轮打完后&#xff0c;决定以j阵容打下一轮 保持原有阵容&#xff1a;dp[ i ][ j ] dp[ i - 1 ][ j ] * p [ j ][ s [ i ] ] 换成第i轮怪的阵容: for(int k0;k<r;k)dp[i][j]max(dp[i][j],dp[i-1][k]*p[k][s[i]]) 优化&#xff1a;用滚动数组&am…

4~20mA电流输出芯片XTR111完整电路(转)

源&#xff1a; 4~20mA电流输出芯片XTR111完整电路转载于:https://www.cnblogs.com/LittleTiger/p/10511115.html

电子书下载:Programming Microsoft LINQ in Microsoft .NET Framework 4

Book DescriptionDig into LINQ — and transform the way you work with data. With LINQ, you can query data from a variety of sources — including databases, objects, and XML files — directly from Microsoft Visual Basic or C#. Guided by data-access experts w…

原型模式 —— Java的赋值、浅克隆和深度克隆的区别

赋值 直接 &#xff0c;克隆 clone 假如说你想复制一个简单变量。很简单&#xff1a; int a 5; int b a; b 6;这样 a 5, b 6 不仅仅是int类型&#xff0c;其它七种原始数据类型(boolean,char,byte,short,float,double.long)同样适用于该类情况。 但是如果你复制的是一个…

一个医院院长电视机坏了,拿到一个大修理店去修

一个医院院长电视机坏了&#xff0c;拿到一个大修理店去修。修理店接待人员:“OK&#xff0c;开机费50元”医院院长: “为什么还没修理就要先交费”&#xff1f;修理店接待人员: “我们修理店的制度就是这样&#xff0c;你们医院的挂号费&#xff0c;不是没看病之前就要交吗”&…

[scrum]2011/9/24-----第四天

scrum 总结&#xff1a; Team member Yesterday’s Work Today’s Work Issue R X Task201&#xff1a;Active Agenda Page的重写&#xff0c;界面设置 Task201&#xff1a;Active Agenda Page 界面的美化&#xff0c;收缩折叠&#xff0c;并添加一些动画效果 Task 243:…

c# 前后日期设置

List<string> list new List<string>(); //根据当月 显示前6个月 for(int i0;i<6;i) { list.add(DateTime.Now.AddMonths(i*-1).Tostring()); }转载于:https://www.cnblogs.com/Dcz1996/p/10515429.html

jq-AJAX 初步了解

js的异步操作(1) 定时器 (2) 事件 (3) 回调 (4) ajax Ajax优点 可以局部更新网页内容。 ajax的本质就是xmlHttpRequest对象控制台出现三个属性 readyState 请求的五个阶段 0 1 2 3 4 responseText 返回的文件内容 Status 状态吗 返回的状态信息 在__proto__有三个方法 …

ARM学习笔记7——乘法指令

ARM乘法指令完成两个数据的乘法&#xff0c;两个32位二进制数相乘的结果是64位的4积。 其中&#xff1a; 1、“RadHi:RdLo”是由RdHi(最高有效32位)和RdLo(最低有效32位)链接形成的64位数&#xff0c;“[31:0]”只选取结果的最低有效32位 2、简单的赋值由“&#xff1a;”表示…

《剑指offer》第四十三题(从1到n整数中1出现的次数)

// 面试题43&#xff1a;从1到n整数中1出现的次数 // 题目&#xff1a;输入一个整数n&#xff0c;求从1到n这n个整数的十进制表示中1出现的次数。例如 // 输入12&#xff0c;从1到12这些整数中包含1 的数字有1&#xff0c;10&#xff0c;11和12&#xff0c;1一共出现了5次。#in…

回调函数

又称callback函数。意思是指&#xff1a;在你的程序中&#xff0c;被windows系统调用的函数。 这些函数虽然由你设计&#xff0c;但是永远不会也不该被你调用&#xff0c;它们是为windows系统准备的。 窗口函数设计为callback形式&#xff0c;才能开放出一个接口给操作系统调用…

固态硬盘Ghost安装Windows 10无法引导的问题

机器配置如下&#xff1a; 电脑型号 技嘉 B360M POWER 台式电脑操作系统 Windows 10 64位 ( DirectX 12 )处理器 英特尔 Core i7-8700 3.20GHz 六核主板 技嘉 B360M POWER ( 英特尔 PCI 标准主机 CPU 桥 - CannonLake - A3…

Linux shell 内部命令与外部命令有什么区别以及怎么辨别

内部命令实际上是shell程序的一部分&#xff0c;其中包含的是一些比较简单的linux系统命令&#xff0c;这些命令由shell程序识别并在shell程序内部完成运行&#xff0c;通常在linux系统加载运行时shell就被加载并驻留在系统内存中。内部命令是写在bashy源码里面的&#xff0c;其…

[转]矩阵分解在推荐系统中的应用

矩阵分解是最近几年比较火的算法&#xff0c;经过kddcup和netflix比赛的多人多次检验&#xff0c;矩阵分解可以带来更好的结果&#xff0c;而且可以充分地考虑各种因素的影响&#xff0c;有非常好的扩展性&#xff0c;因为要考虑多种因素的综合作用&#xff0c;往往需要构造cos…

iPhone 系统刷机

1. 下载好固件(爱思 或者 pp助手) e.g. http://jailbreak.25pp.com/gujian/ 2. 将电脑与手机连接上&#xff0c;弹出iTunes软件即可 3. 长按手机电源键 关闭手机 4. 按住电源健&#xff0c;出现屏幕亮出现苹果标志后再按住Home健 5. 屏幕黑屏时松开电源健&#xff0c;继续按照H…

hdu4044

题意&#xff1a;给你一颗树有n个节点&#xff0c;树的根节点为1&#xff0c;表示为敌人的基地&#xff0c;其他叶子节点为你的基地&#xff0c;你一开始有m元&#xff0c;给你每个节点可以建造的塔的数量和塔的价格和可以照成的伤害&#xff0c;每个节点至多建立一座塔。敌人的…

RS100项目进展更新

1. 添加手机界面访问网页&#xff0c;毕竟PDA的屏幕大小和PC机大小不一致&#xff0c;完成了一自适应网页&#xff0c;便于在手机上观看实时画面&#xff1b; 2. 此项目为一个远程视频监控远程开关项目&#xff0c;远程PC机或者手机能操作到监控端的开关&#xff0c;所以在远程…

python os操作

1 # 常用的文件管理操作2 # https://www.cnblogs.com/dkblog/archive/2011/03/25/1995537.html3 import os4 import shutil5 6 # 切换工作目录,默认是在当前目录下7 # os.chdir("xx")8 9 # 当前的工作目录 D:\pythonworkspace\py_base\cn\tele\io 10 print(os.getcw…