Template filters可以操作任何对象(一次最多操作两个对象).它们只是接受一个或两个参数的函数.例如:
# filter implementation
@filter
def myfilter(arg1, arg2):
....
# usage in template
{{ arg1|myfilter:arg2 }}
它们受到限制,因为它们不能访问模板上下文,并且只能接受有限数量的参数.
Use case:您希望在打印之前稍微修改上下文中的一个变量.
可以改变解析模板的睡觉的方式,并且可以访问使用它们的上下文中的任何东西.他们非常强大.例如,我编写了一个模板标记,它子类{% extends %}
,并允许模板根据当前用户扩展不同的模板.
当使用模板标签时,您可以很容易地识别它们,因为它们围绕在{%
和%}
周围.
Use case:您需要执行一些逻辑,这些逻辑需要Python代码和对模板上下文的访问.
Inclusion tags仍然是模板标记,但是Django提供了一些帮助器(即@inclusion_tag
修饰器)来使编写这类模板标记变得很容易.
Use case:您希望将一个模板呈现为另一个模板.例如,您的网站上可能有一个广告,您希望在不同的地方使用该广告.可能无法使用模板继承来实现您想要的结果,因此您可以编写一个包含标记,而不是多次复制/粘贴广告的HTML.
之所以要在现有的{% include %}
模板标记上使用包含标记,是因为您可能希望使用与您所在的上下文不同的上下文来呈现模板.也许您需要执行一些数据库查询,以 Select 要显示的正确广告.对于{% include %}
,这是不可能的.
Simple tags与包含标记一样,简单标记仍然是模板标记,但它们的功能有限,并且以简化的方式编写.它们允许您编写一个模板标记,该标记接受任意数量的参数(例如{% mytag "some str" arg2 arg3 %}
等),并要求您只实现一个可以接受这些参数的函数(可选context
变量),以便访问模板上下文.
从本质上讲,它们是模板过滤器的升级,因为不是只接受1到2个参数,您可以接受任意数量的参数(并且您还可以访问模板上下文).