模板
1.模板语言
母板:{% block title %}{% endblock %} 子板:{% extends "master.html" %} #只能继承一个模板 {% include 'tag.html' %} #可以继承多个 {% block title %}内容{% endblock %}
2.模板继承
一个html问件只能继承一个模板
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: 100px; background-color: rebeccapurple; } {% block css %}{% endblock %} </style> </head> <body> <div class="pg-header">老男孩管理</div> {% block content %}{% endblock %} <script src="/static/jquery.js"></script> {% block js %}{% endblock %} </body> </html>
test.html继承master.html:
{% extends 'master.html' %} #要extend母板的html问件 {% block content %} <h1>用户管理</h1> <div class='c1';> <ul> <li>{{ u.name }}</li> <li>{{ u.age }}</li> <li>{{ u.gender }}</li> </ul> </div> {% endblock %} {% block title %} 用户管理 {% endblock %} {% block css %} .c1{background-color:red;} {% endblock %}
3.模板里内置函数
{{ item.event_start|date:"Y-m-d H:i:s"}} {{ name|truncatewords:"30" }} #截取字符串name前30个字符 {{ my_list|first|upper }} {{ name|lower }} #字符串转换成小写
示例:
views.py
def temp_func(request): name = 'HJASHasdvppljjf' return render(request,'temp_func.html',{'name':name,})
temp_func.html 模板内置函数
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {{ name }} {{ name|lower }} #用管道符进行字符串大小写的转换 </body> </html>
4.自定义模板函数simple_tag
a、在app中创建templatetags模块
b、创建任意 .py 文件,如:temp.py
@register.simple_tag
from django import template from django.utils.safestring import mark_safe register = template.Library() @register.simple_tag #装饰器 def func1(v1,v2,v3): return v1 + v2 + v3 @register.simple_tag def my_input(id,arg): result = "<input type='text' id='%s' class='%s' />" %(id,arg,) return mark_safe(result)
c、在使用自定义simple_tag的html文件中导入之前创建的 temp.py 文件名
{% load temp%} #load temp.py文件 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {{ name }} {{ name|lower }} {% func1 1 2 3 %} </body> </html>
d、使用simple_tag
{% load temp %} <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {{ name }} {{ name|lower }} {% func1 1 2 3 %} #函数名空格加参数 {% my_input 'i1' 'hide' %} #函数名空格加参数 </body> </html>
e、在settings中配置当前app,不然django无法找到自定义的simple_tag
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'app1' #注册app ]
@register.filter()
如果想在模板函数里传参数与内置函数传参方法一样(my_list|first|upper)
需要在自定义函数里面改成
@register.filter #把simple_tag改成filter def func2(str1,str2): return str1+str2
模板里
{% load temp %} <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {{ name }} {{ name|lower }} {% func1 1 2 3 %} {% my_input 'i1' 'hide' %} {{ "stringg1"|func2:"string2" }} #filter方法 不能有空格 </body> </html>
simple_tag与filter优缺点:
simple_tag:不能作为if条件但是参数可以有多个任意参数
filter:可以作为if条件,但是参数不能任意,只能有两个不能有空格
{% if "stringg1"|func2:"string2" %} #filter可以作为if条件 内容 {%endif%}