Динамически включать элементы шаблона из других приложений в Django - PullRequest
0 голосов
/ 06 августа 2009

App_1 имеет представление и шаблон для этого представления. Он хотел бы «агрегировать» информацию в это представление из других источников (то есть из других приложений), без необходимости добавлять или изменять что-либо само. Возможно, App_2 хочет поместить «hello world» в эту обозначенную область с точки зрения App_1. Каков наилучший способ достижения этого?

Сигналы приходят на ум естественно. Но что должны отправлять получатели сигналов обратно? На мой взгляд, шаблон App_1 включает в себя пользовательский тег, который отправляет сигнал и получает список шаблонов (например, «app_2 / template.html»), и он регистрирует каждый. Тем не менее, похоже, что include_tag поддерживает только 1 рендеринг шаблона для каждого тега.

Какие у меня есть ресурсы?

Ответы [ 2 ]

2 голосов
/ 06 августа 2009

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

0 голосов
/ 06 августа 2009

Надеюсь, я правильно понимаю, но может показаться, что ваше решение этой проблемы находится во втором предложении: «агрегат». Представление function в App_1 должно агрегировать или собирать все необходимые данные, а затем передавать их в шаблон через переменную контекста.

Я думаю, что вопрос, который необходимо решить, таков: как функция представления узнает , какие данные для агрегирования?

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

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

Вместо этого, возможно, вы могли бы создать систему регистрации. Приложение 1 содержит список что-то . Другие приложения «регистрируют» элементы в этом списке, и когда запускается функция представления в App_1, он превращает список в пригодные для использования данные, а затем передает их в шаблон через переменную контекста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...