一、标签

在django中,标签写在{%  标签  %}中

1.if else标签

①通过if进行条件判断

from django.shortcuts import render
def index(request):
context={'age':18}
return render(request,'index.html',context=context)
……
<body>
{% if age > 18 %} #条件表达式用{%%}括起来
<p>成年人</p>
{% elif age == 18 %}
<p>刚成年</p>
{% else %}
<p>未成年</p>
{% endif %} #需要用endif结尾
</body>
……

②使用in进行if条件判断

def index(request):
context={
'name':['libai', 'wangwei', 'dufu']
}
return render(request,'index.html',context=context)
……
<body>
{% if 'libai' in name %}
<p>libai</p>
{% elif 'wangwei' in name %}
<p>wangwei</p>
{% elif 'dufu' in name %}
<p>dufu</p>
{% else %}
<p>No one</p>
{% endif %}
</body>
……

2.for标签

DTL的for in 没有break和continue用法

 ①.基本的for标签循环

def index(request):
context={'books':['红楼梦','西游记','水浒传','三国演义'],
'person':{'name':'alice','age':18,'hobby':'tennis'}}
return render(request,'index.html',context=context)
{% for book in books %}
<p>{{ forloop.counter }}:{{ book }}</p> <!--forloop.counter表示当前循环的下标,从1开始-->
{% endfor %}
<hr>
{% for k,v in person.items %}
<p>{{ k }}:{{ v }}</p>
{% endfor %}

结果显示

②for in empty的用法

如果再在上面的context中定义一个'd':[ ],并且在index.html的body中增加如下一段

{% for f in d %}
<p> {{ f }} </p>
{% empty %}
<p> 结果为空 </p>
{% endfor %}

empty表示如果如果d为空,那么循环自动执行empty下的内容,使其不至于没有返回值。

reversed表示反向遍历,即如果for book in books reversed,则会从列表的最后一个值向前依次遍历

forloop.counter:当前循环的下标,以1作为起始值

forloop.counter0:当前循环的下标,以0作为起始值

forloop.revcounter:当前循环的反向下标,以1作为起始值

forloop.revcounter0:当前循环的反向下标,以0作为起始值

forloop.first:是否是第一次遍历

forloop.last:是否是最后一次遍历

二、django自带过滤器

过滤器语法格式:{{  para1 | filter:para2  }}

1.add过滤器:将两个数相加或字符串、列表等进行拼接

def add(request):
context={'l1':[1,'hello','hi'],'l2':['nice',True]}
return render(request,'add.html',context=context)
……
<body>
<p>{{ 4|add:2|add:6}}</p> <!---->
<p>{{ '4'|add:'hello' }}</p> <!--4hello-->
<p>{{ l1|add:l2 }}</p> <!--[1,'hello','hi','nice',True]-->
<!--不能将整数和字符串拼接,否则会报错,例如{{ 4|add:'hello' }}-->
</body>
……

2.cut过滤器:从字符串、列表、元组等移除一部分

def cut(request):
context={'a':'abc','b':'bcd'}
return render(request,'cut.html',context=context)
……
<body>
<p>{{ a|cut:'a' }}</p> <!--bc-->
<p>{{ 'good job'|cut:' ' }}</p> <!--goodjob-->
</body>
……

3.capfirst过滤器:首字母大写

<p>{{ 'hello world'|capfirst }}</p>  <!--Hello World-->

4.default过滤器:如果对象为空(空字符串、空列表、空字典等),则显示为defaulte指定的值

<p>{{ ''|default:'空字符串' }}</p>  <!--空字符串-->
<p>{{ []|default:'空列表' }}</p> <!--空列表-->
<p>{{ {}|default:'空字典' }}</p> <!--空字典-->

5.date过滤器:将日期按照指定格式处理并显示

from datetime import datetime
def date(request):
context={'time':datetime.now()}
return render(request,'date.html',context=context)
{{ time|date:'Y/m/d H:i:s' }}  <!--2018/12/17 19:42:06-->

三、自定义过滤器和标签

1.自定义标签和自定义过滤器的区别:

①通过@register.simple_tag和@register.filter区分是自定义标签还是自定义过滤器

②自定义标签可以接受多个参数;而自定义过滤器只能接收两个参数,并且第一个参数为使用时管道符|前面的变量

③自定义标签不能在控制语句if中使用,而自定义过滤器可以

2.自定义标签或者过滤器的步骤

①将要创建自定义标签或过滤器的app加入settings文件的installed_apps中

②在app中创建templatetags目录,类型为包即packages

③在templatetags目录下创建py文件,在文件中创建标签或过滤器

④在模板中的第一行通过{% load py文件名 %}导入创建标签或过滤器的py文件

⑤在模板中使用自定义标签或过滤器

示例:在templatetags目录下创建名为myTags的py文件

from django import template
from django.utils.safestring import mark_safe
register=template.Library() #前面三行为必须的 @register.simple_tag #通过@register.simple_tag装饰成标签
def tag_multi(x,y,z): #返回参数相乘的结果
return x*y*z @register.filter #通过@register.filter装饰成过滤器
def filter_multi(x,y): #返回参数相乘的结果,装饰器只能接收两个参数
return x*y

在模板中

{% load myTags %}  <!--在模板中第一行通过load引用创建标签和过滤器的py文件-->
……
<body>
<p> {% tag_multi 2 3 6 %} </p>
<p> {% tag_multi 2 3 'hi' %} </p> <!--以上两条使用自定义标签-->
<p> {{ 5|filter_multi:8 }} </p>
<p> {{ 'hello'|filter_multi:3 }} </p> <!--以上两条使用自定义过滤器-->
……
</body>
</html>

浏览器结果显示

四、 其他可能会用到的标签

{% csrf_token %}:第一次使用post方式提交表单时,需要在表单中添加该标签,才不会被django的csrf中间件阻止

如果视图中的变量名称较长,可在模板中通过with标签对原变量取别名,方便后续在模板中使用,假如视图函数中有一个变量名为abcdefghijklmnopq,可通过以下两种方式进行,通过这两种方式,在with和endwith之间可通过别名使用原来的变量

{% with  abcdefghijklmnopq as var %}      {% endwith %}

{% with  var = abcdefghijklmnopq  %}       {% endwith %}

需要显示内容并使用双大括号括起来,而不希望双大括号之间的内容被渲染成变量,可通过verbatim标签实现,例如上述例子中就是要显示{{age}}而不是显示变量age代表的数值

{% verbatim %}    {{ age }}     {% endverbatim %}

django模板-if标签和for标签的更多相关文章

  1. Python - Django - 模板语言之 Tags(标签)

    标签使用 {% %} 注释语句:{# #} for 循环: views.py: from django.shortcuts import render, redirect, HttpResponse ...

  2. django模板--循环控制标签

    循环控制标签 在django模板中可以通过循环控制标签对列表进行迭代,循环控制标签又称for标签,语法格式如下: {% for value in value_list %} {{ value }} { ...

  3. Django模板层学习笔记

    一. 前言 Django模板层的知识包括标签.过滤器.自定义标签.自定义过滤器以及inclusion_tag,最重要的是模板的继承和导入. 首先模板层最重要的是模板语法,之前我们提过涉及到变量用模板语 ...

  4. Django模板-模板标签

    接着Django模板-基础知识继续写模板相关知识. if标签 {% if %} 标签接受 and , or 或者 not 关键字来对多个变量做判断 ,或者对变量取反( not ). 但是不允许在同一个 ...

  5. 解决AngularJS和Django模板标签冲突问题

    原地址 Django和AngularJS在模板中使用同样的符号来引用变量,例如 {{variable_name}}. 有两种解决办法,各有利弊.一个修改AngularJS模板语法,另一个使用Djang ...

  6. Django——模板层(template)(模板语法、自定义模板过滤器及标签、模板继承)

    前言:当我们想在页面上给客户端返回一个当前时间,一些初学者可能会很自然的想到用占位符,字符串拼接来达到我们想要的效果,但是这样做会有一个问题,HTML被直接硬编码在 Python代码之中. 1 2 3 ...

  7. $Django 模板层(变量、过滤器 、标签)、自定义(模板过滤器,标签)

    1 模版语法之变量:详见源码  -{{ 变量 }}:******重要******{#相当于print了该变量#} {#只写函数名 相当于()执行了#}<p>函数:{{ test }}< ...

  8. 转:django模板标签{% for %}的使用(含forloop用法)

    django模板标签{% for %}的使用(含forloop用法)  {%  %}虽然这个是写在html中,但是这里边写的是服务端代码 在django模板标签中,{% for %} 标签用于迭代序列 ...

  9. python的Web框架,Django模板标签及模板的继承

    模板标签 在传递数据的时候,会有大量的数据展示在浏览器上,而数据会是动态变化的,在html的编写中,数据也是需要动态的,而不能是写死的,如果动态展示呢. 给定的例子数据 views传递数据给html ...

随机推荐

  1. python 内置方法join 给字符串加分隔符

    #!/usr/bin/python3 # -*- coding: utf-8 -*- test = "今天吃了吗" test = "_".join(test) ...

  2. Laravel中路由怎么写(一)

    1.路由基本使用示例 1.1 默认示例 Laravel中所有路由定义在/app/Http/routes.php文件中,该文件默认定义了应用的首页路由: Route::get('/', function ...

  3. js动态规划---背包问题

    //每种物品仅有一件,可以选择放或不放 //即f[i][w]表示前i件物品恰放入一个容量为w的背包可以获得的最大价值. //则其状态转移方程便是:f[i][w]=max{f[i-1][w],f[i-1 ...

  4. securecrt配置经验总结(home.key和颜色)

    还是用securecrt portable方便,配好了,换个机器,打包拷贝过去就行了.不用从两个地方去打包. 参考了网上的资料,颜色参考http://www.jackxiang.com/post/58 ...

  5. 答案在哪里?action config/Interceptor/class/servlet

    项目已提测,这两天我们都集中精力梳理外包团队给我司研发的这个三方支付系统的代码逻辑.今天下午爱琴海会议室,开发组里一同学分享他对支付结果回调的梳理成果. 支付结果回调的整体时序是:支付渠道方处理完用户 ...

  6. Mysql修改字段类型,修改字段名

    mysql修改字段名: ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型; 参考:https://blog.csdn.net/u010002184/article/detai ...

  7. c#之课后习题

    1.折叠代码 #region 折叠内容#endregion 2.保留三位小数 using System; namespace _005_double保留3位小数 { class Program { s ...

  8. sql server2012 远程访问设置(转)

    转自:http://blog.csdn.net/xiadingling/article/details/8215282 步骤 打开SQL server2012,使用windows身份登录   登录后, ...

  9. 软工网络15团队作业4——Alpha阶段敏捷冲刺5.0

    1.每天举行站立式会议,提供当天站立式会议照片一张. 2.项目每个成员的昨天进展.存在问题.今天安排. 成员 昨天已完成 今天计划完成 郭炜埕 完善新建话题界面 实现前端各界面的跳转连接 郑晓丽 进行 ...

  10. git起步

    关于版本控制 什么是版本控制?为什么要版本控制? 版本控制是记录文件内容变化,以便在将来查阅特定版本的系统.有了版本控制,我们就可以将某个文件或是整个项目回退到之前的某个时间段,查看现在和之前相比项目 ...