- 基本使用
- 母版
- 导入include
- 函数 - > 不用加() 自动执行
- 模版自定义函数:
- simple_filter
- 最多两个参数 {{ name2|my_upper2:’ hello!’ }}
- simple_tag
- 参数个数限制 {% my_upper3 name2 ‘ddd’ ‘hello!’ ‘autumn’ %}
- simple_filter 可以做条件判断,simple_tag不行
- simple_filter
- 母版
# menu.html 母版
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div>
<h3>这是一个组件</h3>
<div class="title">标题:</div>
{% block xx %}{% endblock %}
</div>
</body>
</html>
# test.py
{% extends 'menu.html' %}
{% block xx %}
<p>hello!!</p>
{% endblock %}
# 一般写3个block:css一个,内容一个,js一个
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
{% block css %}{% endblock %}
</head>
<body>
<div>
<h3>这是一个组件</h3>
<div class="title">标题:</div>
{% block xx %}{% endblock %}
</div>
{% block js %}{% endblock %}
</body>
</html>
- include
# views.py
def test(request):
return render(request,'test.html',{
'name2':'autumn'
})
# pub.html
<div>
<h3>这是一个组件</h3>
<div class="title">标题:</div>
<div class="content">内容:{{ name2 }}</div>
</div>
# test.html
<body>
{% include 'pub.html' %}
<p>-------</p>
{% include 'pub.html' %}
</body>
- 模版自定义函数:
# views.py
def test(request):
return render(request,'test.html',{
'userinfo':{'name':'summer','age':23,'sex':'man'},
'name2':'autumn'
})
# /app01/templatetags/xx.py
from django import template
register = template.Library()
@register.filter
def my_upper(value):
return value.upper()
# simple_filter 只能最多传2个参数
@register.filter
def my_upper2(value,arg):
return value + arg
# simple_tag 没有参数限制
@register.simple_tag
def my_upper3(value,arg1,arg2,arg3):
return value + arg1 + arg2 + arg3
# simple_filter 可以做条件判断,simple_tag不行
@register.filter
def my_bool(value):
return False
# test.html
{% load xx %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<ul>
{% for i in userinfo %}
<li>{{ i }}</li>
{% endfor %}
</ul>
<ul>
{% for key in userinfo.keys %}
<li>{{ key }}</li>
{% endfor %}
</ul>
<ul>
{% for value in userinfo.values %}
<li>{{ value }}</li>
{% endfor %}
</ul>
<ul>
{% for k,v in userinfo.items %}
<li>{{ k }}--{{ v }}</li>
{% endfor %}
</ul>
<p>{{ name2|upper }}</p>
<p>{{ name2|my_upper }}</p>
// simple_filter
<p>{{ name2|my_upper2:' hello!' }}</p>
// simple_tag
<p>{% my_upper3 name2 'ddd' 'hello!' 'autumn' %}</p>
// simple_filter
{% if name2|my_bool %}
<h3>真</h3>
{% else %}
<h3>假</h3>
{% endif %}
</body>
</html>
自定义simple_tag 过程
- a、在app中创建templatetags模块
b、创建任意 .py 文件,如:xx.py
#!/usr/bin/env python #coding:utf-8 from django import template from django.utils.safestring import mark_safe register = template.Library() @register.simple_tag def my_simple_time(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文件中导入之前创建的 xx.py 文件名
{% load xx %}
d、使用simple_tag
{% my_simple_time 1 2 3%} {% my_input 'id_username' 'hide'%}
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', 'app01', )