关于python:在Django的基本模板中使用form_class

Use form_class in base template in Django

我使用django-haystack,它具有视图SearchView和形式SearchForm。我在页面/search/SearchView中看到此SearchForm,它像一个超级按钮一样工作。

但是我想要我所有页面中的搜索表单。因此,我需要将其放置在模板base.html中,而不是页面特定的模板search.html中。

但是上下文变量{{ form }}仅在我的视图SearchView中可用,而不在所有页面上可用。

我该如何解决?我认为上下文处理器或中间件可以做到这一点,但是在中间件中做到这一点似乎有些矫kill过正。什么是正常做法?我想许多其他人在我之前偶然发现了这个问题。


最安全的解决方案是使用自定义模板标签-最好是包含标签(https://docs.djangoproject.com/en/1.6/howto/custom-template-tags/#inclusion-tags),这样就不会覆盖其他视图的上下文(因为使用'form'作为上下文变量是视图处理表单的常见做法)。

您可能仍然必须滚动自己的搜索视图(基于默认视图),以使整个过程按您的意愿工作...