如何从自定义模板标记模板中访问自己的模板变量?

时间:2012-03-07 23:15:37

标签: python django django-templates

我正在使用Django建立一个网站。

我有一个上下文处理器设置,如下所示:

 TEMPLATE_CONTEXT_PROCESSORS = (
        ...

    "mysite.context_processors.mystandardvariables"
 )

这会添加一些我想在模板中使用的标准变量,例如SITE_NAME和SITE_ROOT。

我刚刚创建了我的第一个自定义模板标记,但我发现无法访问这些标准变量。

我没有收到任何错误,我的页面显示正常,只是我想要的变量不可用。

要检查哪些变量可用,我已使用{% debug %}

我的标签看起来像这样:

@register.inclusion_tag('search/search_snippet.html', takes_context = True)
def search(context):
    form = forms.SearchForm()
    return {'form': form }

标签的模板如下所示:

<form action="{{ SITE_ROOT }}search" method="post">
    {% csrf_token  %}
    <table>
        {{ form.as_table }}
    </table>
    <input type="submit" value="Submit">
</form>

我在我的主页中包含搜索标记,如下所示:

{% extends "base.html" %}
{% load search_tags %}

{% block content %}

{% search %}

{% endblock %}

1 个答案:

答案 0 :(得分:0)

为了回答我自己的问题,我找到了一种使用普通模板标签而不是包含标签来做我想要的方法。

@register.tag
def search(parser, token):
    return SearchNode()

class SearchNode(template.Node):
    def render(self, context):
        return render_to_string('search/search_snippet.html', 
                                 { 'form' : forms.FindForm() }, context)

这里我将上下文传递给将模板呈现为字符串的函数。

我本来希望将其作为包含标记实现,因为它似乎不那么重要,但我不确定如何让它工作。

如果有人知道如何使用包含标记,请回答,我会将您的问题标记为正确答案。