Django 模板渲染
模板语言
{{ 变量 }}
{% 逻辑 %}
{{ 变量 }}
{{ 变量 }}中的点号
用于取出字典/列表等类型数据的值
{{ list.2 }} 获取列表list中索引为2的值
{{ dict.name }} 获取字典中name的值
{{ 变量 }}内置的过滤器
以|分隔
{{ a|safe }} 于django输出前,要求不对字符进行转义。自动转义关闭时自动失效
{{ time|date:'Y-m-d H:i:s' }} 格式化输出时间 年月日时分秒
{{ list|join:',' }} 相当于 ‘,’.join(list)
{{ str|truncatechars:8 }} 显示内容为5个字符与3个点号 共8个字符
{{ str|truncatechars:8 }} 同上 显示单位为单词 按空格辨别
{{ str|length }} str的长度
{{ list|slice:'0-2' }} 切片索引0-2不含2
{{ var|default:'xxx' }} 为var设置默认值为‘xxx’
{{ str|lower }}{{ str|upper }} 输出显示为小/大写
{{ int|filesizeformat }} 转为内存大小单位 类似于2GB 1TB
{% 逻辑 %}
for循环

<ul>
{% for student_name in name %}
<li>{{ student_name }}</li>
{% empty %} //若name为空则于此结束并打印None
<li>None</li>
{% endfor %} //正常结束for循环
</ul>

if 条件判断语句

{% if num > 100 %} //比较运算符两边必须留下空格才可以识别
<p>大于100</p>
{% elif num == 200 %}
<p>等于100</p>
{% else %}
<p>小于100</p>
{% endif %}

csrf_token
防御跨站请求伪造,这个标签用于跨站请求伪造保护
<form action='/main_h/' method="post">
{% csrf_token %} //写在form表单内
<input type="text" name="usm">
<input type="password" name="pwd">
<input type="submit">
</form>
装饰器的形式实现防御跨站请求伪造

from django.views.decorators.csrf import csrf_exempt,csrf_protect
# 于views.py文件中导入csrf_exempt,csrf_protect
@csrf_protect # 强制放行csrf认证,即便全局配置了csrf认
def main_h(request):
return render(request,'main_h.html')
@csrf_exempt # 强制进行csrf认证,即便全局没有配置csrf认证
def dome(request):
return render(request,'dome.html')

模板继承
1 创建一个模板.html文件, 2 {% extends '模板.html' %} 3 模板.html {% block content %} xxxxxxx{% endblock %} 还可以指定名字{% endblock content%} 4 继承模板的文件里面 {% block content %} 自己html里面的内容{% endblock %} 5 保留模板内容的写法 {% block content %} {{ block.super }}自己html里面的内容{% endblock %} 模板

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
div{
float: left;
width: 20%;
}
</style>
</head>
<body>
<h1>Welcome</h1>
{% block head %}
<h1 style="background: antiquewhite">这是模板的大概率应用部分</h1>
{% endblock %}
# 设置可修改内容
<div>
<p>标题一</p>
<p>标题二</p>
<p>标题三</p>
</div>
{% block name %}
<span>主页</span>
{% endblock %}
# 设置可修改内容
</body>
</html>

继承

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% extends "main_h.html" %}
# 继承模板HTML文件
{% block head %}
{{ block.super }}
{% endblock %}
# 继承延用内容
{% block name %}
分页1
{% endblock %}
# 继承修改内容
</body>
</html>

组件
将一个完整功能模块,放到一个hmtl文件中,使用这个模块的其他页面,直接在页面中引入即可,
引入方式{% include '模块.html' %} ,任意位置引入
ps:(仅引入body内容) 组件HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
h1{
width: 100%;
height: 5%;
background: aqua;
}
</style>
</head>
<body>
<h1>这是组件内容</h1>
</body>
</html>

引入组件 {% include 'xxx.html' %}

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> {% include 'h1_h.html' %} //引入组件 ps:(与模板冲突,只会显示模板而不显示组件) </body>
</html>

自定义标签与过滤器
1 app应用文件夹中创建一个叫做templatetags的文件夹
2 创建一个py文件,例如:mytag.py
3 mytag.py,
from django import template
register = template.Library() #register变量必须是这个名字
过滤器:
@register.filter
def xxx(): 参数最多两个
return 'xxx'
标签:
@register.simple_tag
def sss(): 参数可以多个
return 'xxx' 标签:
@register.inclusion_tag('html文件')
def aaa(): 参数可以多个
return {'xx':'xxxxx'} html文件中的使用
<h1>
{# {{ num|xxx:'11,23,33'}}#}
{{ num|xxx:20 }}
{% if num|xxx:20 > 2000 %}
<h2>大于2千</h2>
{% else %}
<h2>小于等于2千</h2>
{% endif %} </h1> <h1>
{% sss num 10 15 %}
</h1> <h1>
{% aaa %}
</h1>
pydiango1\app01\templatetags\mytag.py文件下

from django import template
from django.utils.safestring import mark_safe
register=template.Library() @register.simple_tag
def sum_max(a,b,c,d):
num=a*b*c*d
return num
# 自定义标签 可接收多个参数 @register.filter
def num_20(num1,num2):
num1*=num2
return num1
# 自定义过滤器 最多接收2个参数

HTML文件下
<!DOCTYPE html>
<html lang="en"> <head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> {% load mytag %} //引入mytag.py文件
{% include 'h1_h.html' %}
{% sum_max 7 8 9 10 %} <p>{{ num|num_20:2 }}</p>
</body>
</html>
Django 模板渲染的更多相关文章
- Django—模板渲染
参考文档: http://www.cnblogs.com/fnng/p/4373108.html https://code.ziqiangxuetang.com/django/django-intro ...
- Django模板渲染
一 . 语法 # 关于模板渲染只需要记住两种语法就可以: 1.{{ }} # 里面写变量 2.{% %} # 里面写与逻辑相关的,比如for循环 二 . 变量名 在django的模板语言中按照语法: ...
- 关于Django模板渲染一个很重要的用途
一般情况下我们在模板利用django的for标签循环生成html代码时,可以同时生成形如: "{% url 'dormitory:hygiene_detail' pk={{ id }} %} ...
- Django模板渲染——(二)
模板标签 模板是由HTML代码和一些逻辑控制代码组成的,逻辑控制代码除了前面介绍的变量和过滤器,还要一个非常重要的模板标签.模板标签的语法规则是{% tag %},模板标签在渲染的过程中能提供任意的逻 ...
- Django模板渲染之自定义inclusion_tag详细使用
inclusion_tag在使用的时候可以帮我们减少很多前端和后端重复的代码 逻辑图: inclusion_tag的作用是主页面以一定的语法给一个参数,调用某个函数,这个函数可以通过主页面给的参数做一 ...
- python Django教程 之模板渲染、循环、条件判断、常用的标签、过滤器
python3.5 manage.py runserver python Django教程 之模板渲染.循环.条件判断.常用的标签.过滤器 一.Django模板渲染模板 1. 创建一个 zqxt_tm ...
- 初学Django基础01 建立工程,目录结构,常用配置,上下文管理,模板渲染
django是python的web重量级框架,发展已经有10年多了,对应下面版本 Django 版本 Python 版本 1.8 2.7, 3.2 , 3.3, 3.4, 3.5 1.9, 1.10 ...
- Django模板与Vue.js冲突问题
参考: https://my.oschina.net/soarwilldo/blog/755984 方法1:修改vue.js的默认的绑定符号 Vue.config.delimiters = [&quo ...
- django模板(一)
模板(一) 实验简介 在前一章中,你可能已经注意到我们在例子视图中返回文本的方式有点特别. 也就是说,HTML被直接硬编码在 Python 代码之中. def current_datetime(req ...
随机推荐
- 137、Java内部类之把内部类放到外部
01.代码如下: package TIANPAN; class Outer { // 外部类 private String msg = "Hello World !"; publi ...
- Python - metaclass元类
参考 https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014319106919 ...
- 利用TPL(任务并行库)构建Pipeline处理Dataflow
https://www.cnblogs.com/CoderAyu/p/9757389.html
- Keras入门——(2)卷积神经网络CNN
前期准备工作参考:https://www.cnblogs.com/ratels/p/11144881.html 基于CNN算法利用Keras框架编写代码实现对Minst数据分类识别: from ker ...
- Windows篇:文件对比软件->"DiffMerge"
文件对比软件->"DiffMerge" DiffMerge是什么? 如果没有DiffMerge! 想想一下,有两篇10000字的文章,找不同,眼睛都要看花吧.有了DiffMe ...
- 软件环境常识 --dev sit uat
DEV环境:DEV顾名思义就是develop,即代码开发的环境. SIT环境:System Integration Test系统集成测试,开发人员自己测试流程是否走通. UAT环境:User Acce ...
- [Struts]Token 使用及原理
Struts Token 使用 1,先在一个Action中,调用saveToken(HttpServletRequest request)方法.然后转向带有表单的JSP页面. 2,在JSP页面提交 ...
- Linux关于文件处理命令
一.登陆用户和机器名称 示例:[root@hadoop01 ~]# root:表示用户名 @hadoop01表示机器名称 ~表示当前文件目录是家目录 #表示输入命令提示符,用户可以在其后输入命令:非r ...
- mysql分区介绍
http://www.cnblogs.com/chenmh/p/5644713.html 介绍 可以针对分区表的每个分区指定各自的存储路径,对于innodb存储引擎的表只能指定数据路径,因为数据和索引 ...
- jdk1.7推出的Fork/Join提高业务代码处理性能
jdk1.7推出的Fork/Join提高业务代码处理性能 jdk1.7之后推出了Fork/Join框架,其原理个人理解为:递归多线程并发处理业务代码,以下为我模拟我们公司业务代码做的一个案例,性能可提 ...