模板之母版、继承、导入、自定义函数
模板
母版
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{% block titile %}{% endblock %}</title>
<link rel="stylesheet" href="/static/commons.css">
<style>
.pg-header{
height: 50px;
background-color: gold;
color: white;
}
</style>
{% block css %}{% endblock %}
</head>
<body>
<div class="pg-header">母版</div>
{% block context %}{% endblock %}
<script src="/static/jquery.js"></script>
{% block js %}{% endblock %}
</body>
</html>
继承
extends
书写顺序无要求,仅能继承一个母版
{% extends 'master.html' %}
{% block title %}母版使用{% endblock %}
{% block context %}
<span>用户名</span>
<input type="text" name="user" placeholder="用户名" />
{% endblock %}
{% block js %}
<script>
alert('123');
</script>
{% endblock %}
{% block css %}
<style>
body{
background-color: blue;
}
</style>
{% endblock %}
导入
include
可导入多个
{% block context %}
<span>用户名</span>
<input type="text" name="user" placeholder="用户名"/>
{% include 'tag.html' %}
{% include 'tag.html' %}
{% endblock %}
自定义函数
-
simple_tag
- 优点:参数个数无限制,空格间隔,空格个数无限制
- 缺点:不可作为模板if的条件
-
app下创建templatetags目录
-
在templatetags目录下,创建任意py文件(文件名任意,例如spring.py)
-
在py文件中,创建template对象 register
-
在py文件中,装饰函数
@register.simple_tag def my_define_func(a, b): return a + b
-
settings中注册APP
-
在html文件,第一行添加 {% load spring %}
-
在html文件,body中写 {% 函数名 arg1 arg2 %}
例如: app的templatetags目录下的spring.py
from django import template from django.utils.safestring import mark_safe register = template.Library() @register.simple_tag def my_define_func(a, b): return a + b simple.html {% load spring %} <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> {{ name }} <br/> {{ name|lower }} <br/> {% my_define_func 5 2 %} </body> </html> urls.py url(r'^simple$', views.simple), views.py def simple(request): name = "Tom" return render(request, 'simple.html', {'name': name}) settings.py INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'app01', ] 若html使用继承 {% extends 'master.html' %} {% load spring %} {% block context %} <span>用户名</span> <input type="text" name="user" placeholder="用户名" /> {{ "PM"|my_filter:"LiLi" }} {% endblock %}
-
filter
- 缺点:最多传递2个参数,且不能加空格;若传递多个参数,可以将多个参数组成一个,当成参数2传递,在函数内处理
- 优点:可以作为模板if的条件
- 使用方法:
- {{ 参数|函数名 }}
- {{ 参数1|函数名:参数2 }}
例如:
html {{ "PM"|my_filter:"LiLi" }} app的templatetags目录下的spring.py @register.filter def my_filter(a, b): return a + b 其它与simple_tag一样
-
自定义分页
前端处理
{{ page_str|safe }} page_str = """ <a href="/page/?p=1">1</a> <a href="/page/?p=2">2</a> <a href="/page/?p=3">3</a> """
后端处理
{{ page_str }} from django.utils.safestring import mark_safe page_str = """ <a href="/page/?p=1">1</a> <a href="/page/?p=2">2</a> <a href="/page/?p=3">3</a> """ page_str = mark_safe(page_str)