这是一个关于这四种不同的django标记之间的区别的一般性问题。我刚刚阅读了模板标签上的文档页:http://docs.djangoproject.com/en/dev/howto/custom-template-tags/
但我发现很难知道什么时候应该用一种变化来代替另一种。例如,模板标记可以做simple_tag不能做的事情吗?过滤器是否仅限于操纵字符串,这就是为什么文档说模板标记更强大,因为它们可以“做任何事情”吗?
以下是我对这些区别的看法:
)。
有人能给出一个例子,说明什么时候我想用其中一个而不是另一个吗?
谢谢。
发布于 2011-04-07 19:58:51
模板过滤器可以对任何对象进行操作(最多一次两个)。它们只是一个或两个参数的函数。例如:
# filter implementation
@filter
def myfilter(arg1, arg2):
....
# usage in template
{{ arg1|myfilter:arg2 }}它们是有限的,因为它们不能访问模板上下文,并且只能接受有限数量的参数。
用例:要在打印之前稍微修改上下文中的一个变量。
模板标记可以改变模板的其余部分的解析方式,并可以访问使用它们的上下文中的任何内容。他们很强大。例如,我编写了一个模板标记,该标记子类为{% extends %},并允许模板根据当前用户扩展不同的模板。
当使用模板标记时,您可以很容易地识别它们,因为它们周围都是{%和%}。
用例:您希望执行一些需要Python代码和对模板上下文的访问的逻辑。
包含标记仍然是模板标记,但是Django提供了一些帮助程序(即@inclusion_tag装饰器),以便于编写此类模板标记。
用例:您希望将一个模板呈现到另一个模板中。例如,您可能在您的网站上有一个要在不同地方使用的广告。可能不可能使用模板继承来实现您想要的结果,所以与其为广告多次复制/粘贴HTML,不如编写包含标记。
您将在现有的{% include %}模板标记上使用包含标记的原因是,您可能希望使用与您所在的模板不同的上下文来呈现模板。也许你需要做一些数据库查询,选择正确的广告来显示。这在{% include %}中是不可能的。
简单标签()和包含标签一样,简单标签仍然是模板标签,但它们的功能有限,并且以简化的方式编写。它们允许您编写一个模板标记,该标记接受任意数量的参数(例如,{% mytag "some str" arg2 arg3 %}等),并要求您只实现一个可以接受这些参数的函数(还可以使用一个context变量来访问模板上下文。
从本质上说,它们是模板过滤器的升级,因为您可以接受任意数量的参数,而不是只接受1到2个参数(您还可以访问模板上下文)。
https://stackoverflow.com/questions/5586774
复制相似问题