博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
django模板-if标签、for标签、自定义标签和过滤器
阅读量:5860 次
发布时间:2019-06-19

本文共 3826 字,大约阅读时间需要 12 分钟。

一、标签

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

1.if else标签

①通过if进行条件判断

from django.shortcuts import renderdef index(request):    context={
'age':18} return render(request,'index.html',context=context)
……  {
% if age > 18 %} #条件表达式用{%%}括起来

成年人

{
% elif age == 18 %}

刚成年

{
% else %}

未成年

{
% endif %} #需要用endif结尾……

 

②使用in进行if条件判断

def index(request):    context={        'name':['libai', 'wangwei', 'dufu']    }    return render(request,'index.html',context=context)
……  {
% if 'libai' in name %}

libai

{
% elif 'wangwei' in name %}

wangwei

{
% elif 'dufu' in name %}

dufu

{
% else %}

No one

{
% endif %}……

 

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 %}    

{

{ forloop.counter }}:{
{ book }}

{% endfor %}

{% for k,v in person.items %}

{

{ k }}:{
{ v }}

{% endfor %}

结果显示

 

②for in empty的用法

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

{% for f in d %}    

{

{ f }}

{% empty %}

结果为空

{% 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)
……  

{

{ 4|add:2|add:6}}

{

{ '4'|add:'hello' }}

{

{ l1|add:l2 }}

……

 

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

def cut(request):    context={
'a':'abc','b':'bcd'} return render(request,'cut.html',context=context)
……    

{

{ a|cut:'a' }}

{

{ 'good job'|cut:' ' }}

……

 

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

{

{ 'hello world'|capfirst }}

 

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

{

{ ''|default:'空字符串' }}

{

{ []|default:'空列表' }}

{

{ {}|default:'空字典' }}

 

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

from datetime import datetimedef date(request):    context={
'time':datetime.now()} return render(request,'date.html',context=context)
{
{ time|date:'Y/m/d H:i:s' }}

 

三、自定义过滤器和标签

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 templatefrom django.utils.safestring import mark_saferegister=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 %}  
……

{% tag_multi 2 3 6 %}

{% tag_multi 2 3 'hi' %}

{

{ 5|filter_multi:8 }}

{

{ 'hello'|filter_multi:3 }}

……

浏览器结果显示

 

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

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

 

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

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

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

 

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

{age}}而不是显示变量age代表的数值

{% verbatim %}    {

{ age }}     {% endverbatim %}

 

转载于:https://www.cnblogs.com/Forever77/p/10126536.html

你可能感兴趣的文章
我们来说一说TCP神奇的40ms
查看>>
[LeetCode] 97. Interleaving String
查看>>
微服务架构组件分析
查看>>
Mongodb数据的导出与导入
查看>>
在SAP UI中使用纯JavaScript显示产品主数据的3D模型视图
查看>>
前端编码规范之:样式(scss)编码规范
查看>>
python 设计模式-适配器模式
查看>>
【Leetcode】82. 删除排序链表中的重复元素 II
查看>>
vue_music:排行榜rank中top-list.vue中样式的实现:class
查看>>
修改校准申请遇到的问题
查看>>
第一天·浏览器内核及Web标准
查看>>
Java版本兼容问题
查看>>
【DL-CV】浅谈GoogLeNet(咕咕net)
查看>>
【许晓笛】详解 EOS 的新共识机制 BFT-DPoS
查看>>
python大佬养成计划----win下对数据库的操作
查看>>
前端每日实战:125# 视频演示如何用纯 CSS 创作一个失落的人独自行走的动画...
查看>>
聊聊spring-data-redis的连接池的校验
查看>>
Swoole 源码分析——基础模块之Queue队列
查看>>
Nginx实践篇(4)- Nginx代理服务 - 正向代理和反向代理
查看>>
从0开发豆果美食小程序——项目搭建
查看>>