在我的基本模板中,我想要包含一个搜索表单。
我已经创建了它,但我想知道是否有更好的选择,而不是将form
传递给扩展基础的所有模板?
答案 0 :(得分:12)
是的,这就是模板上下文处理器的用途。它们允许您将变量传递给所有模板,而无需指定。
<强> 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 }}
答案 1 :(得分:1)
你可以把它变成一个返回表单的过滤器,假设它是静态的。它看起来像这样:
<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
答案 2 :(得分:0)
为什么不使用自定义context processor?