我正在使用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 %}
答案 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)
这里我将上下文传递给将模板呈现为字符串的函数。
我本来希望将其作为包含标记实现,因为它似乎不那么重要,但我不确定如何让它工作。
如果有人知道如何使用包含标记,请回答,我会将您的问题标记为正确答案。