Custom template tags and filters
有一个应用polls结构如下,如何自定义templatetags
polls/ __init__.py models.py templatetags/ __init__.py poll_extras.py views.py
一,安装polls
INSTALLED_APPS = [.....'polls']
二,新建templatetags
在polls目录下新建一个templatetags目录,目录下创建一个空文件__init__.py以让python识别到其是一个包
1.自定义filter
from django import templateregister = template.Library()@register.filter(name='cut')def cut(value, arg): return value.replace(arg, '')@register.filterdef lower(value): return value.lower()
2.tag
开启takes_context,可以访问当前上下文context
import datetimefrom django import templateregister = template.Library() @register.simple_tag(takes_context=True)def current_time(context, format_string):#context接收当前页面的上下文字典 timezone = context['timezone'] return your_get_current_time_method(timezone, format_string)
3.Inclusion tags
直接导入渲染过的模板到页面
#results.html
- {% for choice in choices %}
- { { choice }} {% endfor %}
@register.inclusion_tag('results.html')def show_results(poll): choices = poll.choice_set.all()return {'choices': choices}
{% show_results poll %} //返回如下
- First choice
- Second choice
- Third choice