模板
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%}
浙公网安备 33010602011771号