如何给“包含”模板添加上下文?

时间:2009-07-27 14:20:03

标签: django django-templates

是否有可能缩小包含的上下文。

例如,我有来自posts数组的“for”标签 - 一个帖子。我想把这篇文章放在“include”标签内以更详细地呈现。是否有自定义标签?

3 个答案:

答案 0 :(得分:6)

虽然我在解释你的问题时遇到了一些问题,但我相信你所寻找的是django所谓的“包含标签”。它们写起来很简单:

>>> from django import template
>>> register = template.Library()
>>> @register.inclusion_tag('my_template.html')
>>> def my_tag(post):
>>>     return {'post': post}

这应该放在你的一个应用程序中名为“templatetags”的python模块中(不要忘记__init__.py!)。然后,您可以加载它(如果您将文件命名为my_tag.py),如下所示:{% load my_tag %}。每当你在该点之后使用{% my_tag post %}时,Django将自动包含并呈现模板my_template.html,其中包含由标签的返回值指定的上下文。有关详细信息,请参阅Django's custom template tags

答案 1 :(得分:1)

我认为{% include 'foo.html' only %}会做你想要的。请查看此处的手册:https://docs.djangoproject.com/en/1.4/ref/templates/builtins/#include

答案 2 :(得分:0)

使用{%include'foo.html'%}标记可让foo.html模板访问包含该模板的模板的完整上下文。我不确定为什么你需要限制包含模板的上下文。

如果确实需要限制上下文,那么我建议您编写一个自定义模板标记来执行包含但使用指定的上下文呈现包含的模板。这是相对微不足道的,但是,听起来似乎可能有更好的方法来解决这个问题。

您可以在DjangoProject.com网站(this page)上找到有关编写自定义模板标签的信息。