Как связать представления в Django? - PullRequest
4 голосов
/ 03 февраля 2009

Я реализую Джеймс Беннетт отлично django-contact-form , но попал в ловушку. Моя страница контактов содержит не только форму, но и дополнительную информацию на плоской странице.

Не переписывая существующее представление, которое использует форма контакта, я хотел бы иметь возможность обернуть или связать представления. Таким образом, я мог бы добавить некоторую дополнительную информацию через контекст, чтобы и форма, и данные плоской страницы могли отображаться в одном шаблоне.

Я слышал, там упоминалось, что это возможно, но я не могу понять, как заставить это работать. Я создал свое собственное представление-обертку, которое называется представлением контактной формы, и попытался осмотреть объект HttpResponse на предмет атрибута, к которому я могу добавить, но я не могу понять, какой, если таковой имеется, это.

РЕДАКТИРОВАТЬ: Джеймс прокомментировал, что последний код можно найти новый здесь в BitBucket.

Ответы [ 3 ]

2 голосов
/ 04 февраля 2009
  1. Напишите оболочку, которая использует URL для поиска соответствующего объекта плоской страницы.
  2. Из вашей оболочки вызовите (и верните ответ от) представление формы контакта, передав плоскую страницу в аргументе extra_context (который, помимо прочего, предназначен именно для этого варианта использования).
  3. Третьего шага нет.
2 голосов
/ 03 февраля 2009

Есть контекстный процессор, который может делать то, что вы хотите.

http://docs.djangoproject.com/en/dev/ref/templates/api/

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

1 голос
/ 03 февраля 2009

Контекстные процессоры - это то, о чем вы думаете. И render_to_response не имеет значения. Необходимая часть информации - если представление использует RequestContext или нет, так как это активирует процессоры контекста.

Кроме этих, нет способа «связать» представления для добавления в контекст - вы можете заключить одно представление в другое и изменить входящие в него данные, но вы не можете добавить в контекст таким образом .

...