0

Я использую django-haystack и имеет вид SearchView и форму SearchForm. Я вижу это SearchForm в моем SearchView на странице /search/, и он работает как шарм.Использование form_class в базовом шаблоне в Django

Но я хочу, чтобы форма поиска находилась на всех моих страницах. Поэтому мне нужно поместить его в свой шаблон base.html вместо шаблона для страницы search.html.

Но переменная контекста {{ form }} доступна только на мой взгляд SearchView, а не на всех страницах.

Как я могу это решить? Я думаю, что обработчик контекста или промежуточное ПО будет делать это, но, похоже, это излишне, чтобы сделать это в промежуточном программном обеспечении. Что такое нормальная практика? Я думаю, многие другие наткнулись на эту проблему передо мной.

ответ

1

Самым надежным решением является использование пользовательского templatetag - предпочтительно тега включения (https://docs.djangoproject.com/en/1.6/howto/custom-template-tags/#inclusion-tags), поэтому вы не переопределяете контекст другого представления (поскольку использование 'form' в качестве контекстной переменной является распространенной практикой для представлений, обрабатывающих форму).

Возможно, вам все равно придется катить свой собственный поиск (основанный на стандартном), чтобы все работало так, как вы хотите ...