- 基本使用
- 母版
- 導入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', )