模板
Posted dongshiyi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模板相关的知识,希望对你有一定的参考价值。
模板语言:
{{ obj }}
在 Django 模板中遍历复杂数据结构的关键是句点字符 .
.的用法:
访问列表索引 list = [1, 2, 3] {{ list.0 }} # 等于1
访问字典的值 dict = {‘k1‘: ‘v1‘, ‘k2‘: ‘v2‘} {{ dict.k1 }} # 等于v1
访问对象的属性 d = datetime.date(1993, 5, 2) {{ d.year }} # 等于1993
引用对象的方法 str = ‘my_dear_love‘ {{ str.upper }} # 等于MY_DEAR_LOVE
# 注意这里调用方法时并没有使用圆括号 而且也无法给该方法传递参数;你只能调用不需参数的方法。
{{ obj|filter:param }} filter变量过滤器 param参数(最多只能传一个参数)
obj-->num:
add:3 给变量加上3
obj-->str
addslashes 给变量中的引号前加上斜线
capfirst 首字母大写
cut:"v" 从字符串中移除v
first 返回字符串第一个字符
length 返回字符串长度
slice:":12" 返回字符串前11个字符
obj-->html类型字符串(‘<a href="#">跳转</a>‘):
{% autoescape on %}
{{ value6 }} 使字符串可被当中html解析
{% endautoescape %}
safe 使字符串可被当中html解析
obj-->url类字符串
urlencode 将字符串中部分内容进行编码再返回
default 如果值是False,就替换成设置的默认值,否则就是用本来的值
default_if_none 如果值是None,就替换成设置的默认值,否则就使用本来的值
自定义filter和simple_tag
1 在app中创建templatetags模块(必须的)
2 创建任意 .py 文件,如:my_tags.py
from django import template
from django.utils.safestring import mark_safe
register = template.Library()
@register.filter
def my_filter(self, arg): # self为对象自己,arg为所传参数
return self*arg
@register.simple_tag
def my_tag(v1, v2):
return v1 + v2
@register.simple_tag
def my_input(id, arg):
result = "<input type=‘text‘ id=‘%s‘ value=‘%s‘ />" % (id, arg,)
return mark_safe(result)
3 在使用自定义simple_tag和filter的html文件中导入之前创建的 my_tags.py :{% load my_tags %}
4 使用simple_tag和my_filter(如何调用)
<h2>{{ num|my_filter }}</h2>
<p>{% my_tag 1 4 %}</p>
<p>{% my_input ‘x1‘ ‘mydear‘ %}</p>
5 在settings中的INSTALLED_APPS配置当前app,不然django无法找到自定义的simple_tag.
注意:filter可以用在if等语句后,simple_tag不可以
{% tags %}
{% if %}
{% if %}标签计算一个变量值,如果是“true”,即它存在、不为空并且不是false的boolean值,
系统则会显示{% if %}和{% endif %}间的所有内容
{% if %} 标签接受and,or或者not来测试多个变量值或者否定一个给定的变量
{% if %} 标签不允许同一标签里同时出现and和or,否则逻辑容易产生歧义,
例如下面的标签是不合法的:
{% if obj1 and obj2 or obj3 %}
{% for %}
{% for %}标签允许你按顺序遍历一个序列中的各个元素,每次循环模板系统都会
渲染{% for %}和{% endfor %}之间的所有内容
forloop.counter表示循环的次数,它从1开始计数,第一次循环设为1
forloop.counter0 类似于forloop.counter,但它是从0开始计数,第一次循环设为0
forloop.revcounter 反向计数
forloop.first当第一次循环时值为True,在特别情况下很有用
{% empty %}
当对象为空时,执行{% empty %}下面的代码
{% csrf_token %}
用于生成csrf_token的标签,放在form里面的最后,用于防治跨站攻击验证。
其实,这里是会生成一个input标签,和其他表单标签一起提交给后台的。
{% url "name" %}
引用路由配置的别名地址
{% with %}
用更简单的变量名替代复杂的变量名
{% with total=fhjsaldfhjsdfhlasdfhljsdal %} {{ total }} {% endwith %}
{% verbatim %}
禁止render
{% verbatim %}
{{ hello }}
{% endverbatim %}
{% load tag_name %}
加载标签库
{% include ‘foot.html‘ %}
在当前位置插入内容
{% block blockname %}
将此部分html代码包装,方便调用
{% endblock %}
{% extends "base.html" %}
引入其他模板
以上是关于模板的主要内容,如果未能解决你的问题,请参考以下文章