Как объединить представления в цепочку в Django?
-
21-08-2019 - |
Вопрос
Я внедряю Джеймс Беннетт'это превосходно django-контактная форма но наткнулись на загвоздку.Моя страница контактов содержит не только форму, но и дополнительную информацию на плоской странице.
Не переписывая существующее представление, используемое контактной формой, я хотел бы иметь возможность объединять или объединять в цепочку представления.Таким образом, я мог бы ввести некоторую дополнительную информацию через контекст, чтобы и форма, и данные плоской страницы могли быть отображены в одном шаблоне.
Я слышал упоминание о том, что это возможно, но, похоже, я не могу понять, как заставить это работать.Я создал свое собственное представление оболочки, названное представлением контактной формы, и попытался проверить объект HttpResponse на предмет атрибута, к которому я могу добавить, но, похоже, не могу понять, какой это атрибут, если он вообще есть.
Редактировать: Джеймс прокомментировал, что последний код может быть найден новым здесь в BitBucket.
Решение
- Напишите оболочку, которая использует URL-адрес для поиска соответствующего объекта плоской страницы.
- Из вашей оболочки вызовите (и верните ответ из) представление контактной формы, передав плоскую страницу в
extra_context
аргумент (который существует, среди прочего, именно для такого варианта использования). - Третьего шага нет.
Другие советы
Есть контекстный процессор, который может делать то, что вы хотите.
http://docs.djangoproject.com/en/dev/ref/templates/api/
Вероятно, вы можете добавить свои различные фрагменты "информации о плоской странице" в контекст.
Контекстные процессоры - это то, о чем вы думаете.И render_to_response не имеет значения.Требуемая часть информации заключается в том, использует ли представление RequestContext или нет, поскольку именно это активирует контекстные процессоры.
Кроме них, нет способа "связать" представления для добавления в контекст - вы можете обернуть одно представление в другое и изменить вводимые в него данные, но вы не может добавляйте в контекст таким образом.