转义
django的模板语言转义是:
1. render({'t2': ‘<p>2<p/>’ }) 直接 {{ t2|safe }}就能显示段落
2. render {'t2': '<p><p>' } 需要手动写一个转换器如下面的trans,先将 <p>转换成<p>然后再safe,才能显示为“段落” --> {{ t2 |trans | safe }}
@register.filter
def trans(ele):
"""
转换 “<p>17</p>” 为“<p>17<p/>”
:param ele:
:return:
"""
ele = ele.replace("<p>", "").replace("</p>", "")
ele = ele.replace("&lt;","<").replace("&gt;",">").replace("<br/>","").replace("&nbsp;"," ")
ele = ele.replace("<", "<").replace(">", ">").replace(""", "\"").replace(">", ">").replace("##$$##","__________")
# print("ele",ele)
return ele
本次内容记忆
- 自定义函数
simple_tag
a. app下创建templatetags的python目录(一定要在app下,就是和app下的model.py,views.py同级目录)
b. 任意xxoo.py文件
c. 创建template对象 register
d.
@register.simple_tag
def func(a1,a2,a3....)
return "asdfasd"
e. settings中注册APP
f. 顶部 {% load xxoo %}
g. {% 函数名 arg1 arg2 %}
缺点:
不能作为if条件
优点:
参数任意
filter
a. app下创建templatetags目录(名字不能改)
b. 任意xxoo.py文件
c. 创建template对象 register
d.
@register.filter
def func(a1,a2)
return "asdfasd"
e. settings中注册APP
f. 顶部 {% load xxoo %}
g. {{ 参数1|函数名:"参数二,参数三" }} {{ 参数1|函数名:数字 }}
缺点:
最多两个参数,不能加空格
优点:
能作为if条件
-------------------------------我是分割线---------------------------------------
将共同的写入一个模板文件,可以命名为master.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{% block title %}{% endblock %}</title>
<link rel="stylesheet" href="/static/commons.css"/>
<style>
.pg-header{
height:50px;
background-color:blue;
text-align:center;
font-size : 30px;
}
.menu{
width:200px;
background-color: darkgrey;
position: absolute;
top:50px;
left:0;
bottom:0;
text-align:center
}
.content{
position: absolute;
left:200px;
top:50px;
right:0px;
bottom:0px;
padding-left:50px;
}
</style>
{% block css %}{% endblock %}
</head>
<body>
<div class="pg-header">欢迎来到测试页面</div>
<div class="menu"><h2>菜单栏</h2></div>
<div class="content">
{% block content %}{% endblock %}
</div>
<script src="/static/jquery-1.12.4.js"></script>
{% block js %}{% endblock %}
</body>
</html>
如果有html要套用这个模板(master.html),那么可以这样写,t1.html里面继承的顺序(content,js,css)与最后实现结果没有关系
{% extends 'master.html' %}
{% load autodefine %}
{% block title %}t1{% endblock %}
{% block content %}
<h3>1.下面写入t1的内容</h3>
<div>这是t1</div>
<input id='i1' type="button" value="点击"/>
<h3>2.模板语言include使用</h3>
{% for i in u %}
<div>{% include 'tag.html' %}</div> <!--如果要想要循环写一些功能的话,你可以把要循环的内容放入一个新的html,然后用include就可以 -->
{% endfor %}
<h3>3.模板语言自定义函数</h3>
{add 1 2 3}方式可以传多个参数: {% add 1 2 3 %}
<br/>
{ 1|add2:'30,40' }方式最多传2个参数: {{ 1|add2:"30,40" }}
<h3>4.末班语言内置函数</h3>
{{ name|lower }}
{% endblock %}
{% block js %}
<script>
$('#i1').on('click',function(){
alert('t1');
})
</script>
{% endblock %}
tag.html <用于include>,可以用循环一次性放多个
<input type="text" />
自定义函数,autodefine
from django import template
from django.utils.safestring import mark_safe
register = template.Library()
@register.simple_tag
def add(a1,a2,a3):
return a1+a2+a3
@register.filter
def add2(a1,a2):
print(a2)
return str(a1) + a2
样品示例: