【发布时间】:2011-09-04 04:41:28
【问题描述】:
在我的基本模板中,我想包含一个搜索表单。
我已经创建了它,但我想知道是否有比将 form 传递给扩展基础的所有模板更好的选择?
【问题讨论】:
标签: django django-templates django-forms
在我的基本模板中,我想包含一个搜索表单。
我已经创建了它,但我想知道是否有比将 form 传递给扩展基础的所有模板更好的选择?
【问题讨论】:
标签: django django-templates django-forms
是的,这就是模板上下文处理器的用处。它们允许您将变量传递给所有模板,而无需指定。
settings.py
TEMPLATE_CONTEXT_PROCESSORS = (
'django.contrib.auth.context_processors.auth',
'django.core.context_processors.debug',
...
'some_app.context_processors.search_form',
)
context_processors.py(你可以把它放在你的一个应用中,或者如果你喜欢的话,放在主目录中)
from my_forms import MySearchForm
def search_form(request):
return {
'search_form' : MySearchForm()
}
现在您可以在所有模板中使用 {{ search_form }}
【讨论】:
search_form 函数的签名吗?我的意思是,我可以添加更多参数吗?有时我想绑定表单而不是将其创建为空。
假设它是静态的,您可以将其制成返回表单的过滤器。然后它看起来像这样:
<body>
...
{% import_form_template %}
...
</body>
或者类似的东西。如果你需要它更动态一点,你也可以让它接受参数:
{% import_form_template arg1 arg2 arg3 %}
https://docs.djangoproject.com/en/dev/howto/custom-template-tags/#writing-custom-template-tags
【讨论】:
为什么不使用自定义context processor?
【讨论】: