Django模板——自定义标签

Django模板——自定义标签

​ 标签比过滤器更复杂,因为标签可以做任何事情。Django提供了许多快捷方式,可以更轻松地编写大多数类型的标签。首先,我们将探讨这些快捷方式,然后解释如何在快捷方式不够强大的情况下从头开始编写标签。

1.简单标签

1.1创建

同过滤器,在app目录下创建模块,定义方法。

1.2注册

#与过滤器雷同,Library().simple_tag
from django.template import Library

register = Library()


@register.simple_tag(name='curTime')
def cur_time(formt_str):
    return datetime.now().strftime(formt_str)

'''
也可以函数注册
register.simple_tag(name='curTime', func=cur_time)
'''

1.3引用上下文

如果模板标记需要访问当前上下文,则可以在注册标记时使用参数takes_context

如果takes_context在创建模板标记时指定,则标记将没有必需的参数,并且基础Python函数将具有一个参数 - 从调用标记时开始的模板上下文。

#请注意,必须调用第一个参数context。
from datetime import datetime
from django.template import Library

register = Library()


@register.simple_tag(name='curTime', takes_context=True)
def cur_time(context):
    formt_str = context.get('format_str')
    return datetime.now().strftime(formt_str)

2.包含标签

展示的是渲染的另一个模板,在当前模板进行扩展内容,故而叫inclusion_tag

2.1定义

2.1.1 定义函数

接受调用时传递的模板变量,定义接受参数的函数并为结果生成数据字典。这里重点是我们只需要返回字典,而不是更复杂的字典。这将用作模板片段的模板上下文。

#filename 是输出模板的位置
@register.inclusion_tag(filename='custom_tags/list_to_ul.html')
def list_to_ul(value):
    return {'iterator': value}
    #字典的key在输出模板要用到
2.1.2定义模板

创建用于呈现标记输出的模板。此模板是标记的固定功能:标记编写器指定它,而不是模板设计器。按照我们的示例,模板非常简单:

<!--project/templates/custom_tags/list_to_ul.html-->
<ul>
{% for item in iterator %}  <!--iterator:函数返回字典的key-->
    <li> {{ item }} </li>
{% endfor %}
</ul>

2.2使用

#project/app/views.py
def index(request):
    context = {
        'format_str': '%Y-%M-%D %H:%M:%S',
        'fruits': ['苹果', '葡萄', '桃子'],
    }
    return render(request, 'book/index.html', context=context)
<!--调用标签-->
列表:{% list_to_ul  fruits %}

3.分配标签

类似于简单标签,但并不会输出结果,可以使用 as 关键字将结果赋给一个参数。

@register.assignment_tag
def get_current_time(format_string):
    return datetime.datetime.now().strftime(format_string)
{% get_current_time "%Y-%m-%d %I:%M %p" as the_time %}
<p>The time is {{ the_time }}.</p>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值