$Django 模板层(变量、过滤器 、标签)、自定义(模板过滤器,标签)
1 模版语法之变量:详见源码
-{{ 变量 }}:******重要******{#相当于print了该变量#}
{#变量为函数和类时会自动加()执行拿到结果,如果函数和类需要传参数,则无值#}
<p>函数:{{ test }}</p>
{#对象内存地址#}
<p>对象:{{ p1 }}</p>
-深度查询---->统一都用句点符 .
{#列表取值 .0/1/2 字典取值 .name#}
<p>列表对象的age:{{ p_list.1.age }}</p>
2 模版之过滤器
-语法:{{第一个参数|过滤器名字:第二个参数}},最多2个参数(自定义的也是)
-常用过滤器:(详细用法见源码)
-length
-default
-slice
-date
-filesizeformat
-truncatechars
-truncatewords
-safe
-add
3 模版之标签
-{% 标签 %}
-for:forloop:对象(里面有好多东西:parentloop,last,first,counter....)忘记的话, 自己打印一下
{% for foo in 'abcdef' %}
{{ forloop }}
<p>
({{ foo }}) {{ forloop.counter0 }} {{ forloop.counter }} {{ forloop.revcounter }} {{ forloop.first }} {{ forloop.last }}</p>
{% endfor %}
empty:被循环的对象是空,才走它
{% for foo in '' %}
<p>{{ foo }}</p>
{% empty %}
<p>循环体为空 执行empty</p>
{% endfor %}
for循环可以嵌套,也可以用if, ***标签不能用在if判断,过滤器,运算符等可以用在if判断
-if:
{% if tag %}
<p>此处为if(if标签内条件不能是 标签 )</p>
{% elif tag == 2 %}
<p>此处为elif</p>
{% else %}
<p>此处为else</p>
{% endif %}
-with:重命名,应用在变量名过长
{% with dic.hb.0 as b%}
<p>取别名简化书写 {{ b }}</p>
{% endwith %}
********都要有结束********
4 自定义标签和过滤器
--***过滤器最多2个参数,标签可以多个
-自定义过滤器
-1 没注册app,一定要注册
-2 在app下创建一个templatetags(****名字不能变***)的文件夹(模块)
-3 在模块下创建一个py文件,名字随意:mytag.py
-4 # 第一步,导入template
from django.template import Library
# 第二步,定义一个叫register的变量=template.Library()
register = Library()
-5 写一个函数,用@register.filter(name='yyy')装饰一下(name可以指定别名,没取别名用函数名)
@register.filter(name='yyy')
def str_add(str1, str2): #一定要有返回值
# 业务逻辑很复杂
return str1 + str2
-6 在模板里:(新定定义标签,过滤器后,都要重启程序)
{% load mytag %}
{{ 'lqz' | yyy : 'nb' }}
-自定义标签:
-1-4:前4步,根过滤器的定义完全一样
-5 只是装饰器不一样
@register.simple_tag()
def add_nb(value):
return value+'nb'
-6 在模板里:(多个参数,以空格区分)
{% load mytag %}
{% add_nb 'lqz'%}
随机推荐
- zepto.js
// Zepto.js// (c) 2010-2016 Thomas Fuchs// Zepto.js may be freely distributed under the MIT license. ...
- windows cmd命令 批处理bat 导增量jar包【原】
下载地址 https://pan.baidu.com/s/1cIyCbG 导jar包 @echo off setlocal enabledelayedexpansion echo ---------- ...
- vs code解决golang开发环境问题 dial tcp 216.239.37.1:443: connectex: A connection attempt failed
安装插件是出现 如下错误提示, https fetch failed: Get https://golang.org/x/tools/cmd/gorename?go-get=1: dial tcp 2 ...
- vue-router中query与params区别
query和params两者都是在Vue路由中传参. 用法: query用path来引入,params只能用name来传递,不能使用path 展示效果:query更像ajax中get请求(会在地址栏显 ...
- npm scripts 脚本基础指南
什么是npm脚本? npm 允许在package.json文件里面,使用scripts字段定义脚本命令. 初始化package.json -> npm init -> 经历一系列的问答即可 ...
- Javascript async异步操作库简介
异步操作知识 在js世界中, 异步操作非常流行, nodejs就是特点基于异步非阻塞. js语言支持的异步语法包括, Promise async await generator yield. 这些语 ...
- shell 命令使用笔记
1.提取字符串中以.ddd结尾的ddd值 result=$(echo "chip86.500" | grep -Eo '\.[0-9]{1,}' | grep -Eo '[0-9] ...
- faster rcnn相关内容
转自: https://zhuanlan.zhihu.com/p/31426458 faster rcnn的基本结构 Faster RCNN其实可以分为4个主要内容: Conv layers.作为一种 ...
- core.net 创建coreclass 项目出现一些问题
错误如下: Project CoreTest does not have a lock file. Please run "dotnet restore" to generate ...
- Rem自适应js---flexible.min.js
网上看到很多移动端适配的各种方法,由于原来工作中对rem的疏忽,所以决定重新学习rem~ 由于移动端特殊性,本文讲的是如何使用rem实现自适应,或叫rem响应式布局,通过使用一个脚本就可以rem自适应 ...