首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django模板过滤器、标记、simple_tags和inclusion_tags

Django模板过滤器、标记、simple_tags和inclusion_tags
EN

Stack Overflow用户
提问于 2011-04-07 19:51:35
回答 1查看 9.8K关注 0票数 43

这是一个关于这四种不同的django标记之间的区别的一般性问题。我刚刚阅读了模板标签上的文档页:http://docs.djangoproject.com/en/dev/howto/custom-template-tags/

但我发现很难知道什么时候应该用一种变化来代替另一种。例如,模板标记可以做simple_tag不能做的事情吗?过滤器是否仅限于操纵字符串,这就是为什么文档说模板标记更强大,因为它们可以“做任何事情”吗?

以下是我对这些区别的看法:

  • 模板筛选器:只对字符串进行操作并返回字符串。不访问models?
  • template标记:访问视图中可以访问的任何内容,将其编译为具有指定呈现函数的节点(似乎唯一的优点是可以向context?)
  • simple_tags:添加变量-获取字符串和模板变量,并返回一个字符串,则会传递模板变量的值,而不是变量本身(当您希望变量本身超过value?)
  • inclusion标记时:允许您呈现任意额外的模板

)。

有人能给出一个例子,说明什么时候我想用其中一个而不是另一个吗?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-04-07 19:58:51

模板过滤器可以对任何对象进行操作(最多一次两个)。它们只是一个或两个参数的函数。例如:

代码语言:javascript
复制
# 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个参数(您还可以访问模板上下文)。

票数 67
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5586774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档