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