【发布时间】:2012-03-25 12:29:55
【问题描述】:
我正在使用 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 %}
【问题讨论】:
-
您确定要查找的密钥不在
context? -
谢谢,看起来他们是!我想我必须合并我的“表单”变量并返回“上下文”?
-
不,您不必合并变量。您应该能够通过它们的键获取上下文中的变量,然后您的包含标签可以拾取并执行某些操作,例如
context.get('SITE_NAME', None) -
是的,我可以,但这肯定意味着我的包含标签必须具有可用变量的“站点特定”知识?无论如何,感谢您迄今为止的帮助。
-
不一定。 .get() 返回的
None是如果它们的键不存在将返回的内容,因此如果您想在不同的项目中使用该模板标签,您可以这样做而不会在键不存在时引发运行时异常'不存在。
标签: python django django-templates