1.自定义过滤器
1.1主目录新建common包
新建文件夹common,在common文件夹下建__init__.py文件。在common文件夹下新建文件夹templatetags,在templatetags文件夹下新建__init__.py文件。
1.2 注册APP
在settings.py文件中注册名为common的APP。
INSTALLED_APPS=[
‘common’,
]
1.3编辑函数并注册
在templatetags下新建self_defined.py文件
from django import template
register = template.Library()
@register.filter
def mylower(attr):
return attr.lower()
1.4在html文件中使用
在html文件开头载入函数文件
{% load self-defined %}
{{ str|mylower }}
2.自定义标签
2.1直接从context中取参数,需要在注册时加入takes_context=True
from django import template
from datetime import datetime
register = template.Library()
@register.simple_tag(takes_context=True)
def current_time(context):
str1 = context.get('ts')
return datetime.now().strftime(str1)
视图函数
ts = '%Y-%m-%d %H:%M:%S %A'
def test(request):
return render(request,'blog/test.html',
context={'ts':ts})
html文件中调用
{% current_time %}
2.2在html中使用参数
from django import template
from datetime import datetime
register = template.Library()
@register.simple_tagtr
def current_time(attr):
return datetime.now().strftime(attr)
视图函数
ts = '%Y-%m-%d %H:%M:%S %A'
def test(request):
return render(request,'blog/test.html',
context={'ts':ts})
html文件中调用
{% current_time ts%}
3.包含标签
当html页面中存在大量格式类似但内容不同的标签组时,可以使用包含标签代替
3.1 编辑标签内容
新建tags.html文件
<ul>
{% for i in choices %}
<li>{{ i }}</li>
{% endfor %}
</ul>
3.2 定义函数并注册
@register.inclusion_tag('tag.html')
def show(attr):
return {'choices':attr}
3.3 视图函数
def test(request):
return render(request,'blog/test.html',
context={
'xx':['taka', 'xiaopo', 'nanbei', 'juhao']
})
3.4 html页面
{% load self-defined %} 开头
{% show xx %}
3.5 直接接受context中参数
@register.inclusion_tag('tag.html',takes_context=True)
def show(context):
attr = context.get(‘xx’)
return {'choices':attr}
页面中
{% load self-defined %} 开头
{% show %}