Как я могу поместить блок динамически сгенерированного контента в шаблон django?
-
06-07-2019 - |
Вопрос
Я хочу включить в шаблоны django такие вещи, как статус Twitter или восхитительные теги.
Все это динамично, но регулярно. Как это будет сделано?
Решение
Есть несколько способов справиться с этим, поэтому вы можете выбрать метод, который наилучшим образом соответствует вашему личному стилю или требованиям:
<Ол>Переменная контекста шаблона : ответив Алекс, вы можете поместить свое содержимое в переменную контекста, которая входит в контекст каждого шаблона, созданного каждым представлением. Django даже предоставляет механизм для этого автоматически, называемый контекстный процессор а>. Плюсы: очень просто. Минусы: не будет динамически обновлять новый контент в клиентских браузерах.
Динамическая загрузка AJAX : как уже упоминали Алекс и Дейв, вы можете динамически загружать свой контент, используя методы AJAX. В качестве примера, использующего jQuery, вы должны поместить заполнитель в шаблон как-то вроде <div id="twitterfeed"></div>
, а затем в блок javascript в своем шаблоне put $("#twitterfeed").load("{% url twitterfeed %}");
где twitterfeed
- это URL-адрес, названный так в вашем urls.py. Плюсы: будут динамически обновлять браузеры. Минусы: может быть сложно, если вы не знаете Javascript.
Тег включения . Django предоставляет тип тега шаблона, который называется тег включения , который по сути является пользовательским тегом шаблона, который может отображать динамический контент. В некотором смысле это похоже на переменную контекста, за исключением того, что ваш код для генерации контента будет вызываться только тогда, когда вы используете пользовательский тег шаблона в своем шаблоне вместо вызова для каждого представления. Еще одним преимуществом является то, что контент генерируется из собственного шаблона. Конечно, вы можете сделать это с помощью обычной контекстной переменной, но она не так чиста (IMHO), как использование тега включения. Плюсы: очень просто, чисто. Минусы: не будет динамически обновлять новый контент в клиентских браузерах.
Другие советы
Самый простой подход - использовать {{ mycontent }}
в своем шаблоне (где вы хотите, чтобы динамически генерируемый контент появлялся) и поместить соответствие между mycontent
и его значением в контексте, который вы используете для рендеринга шаблона - т.е. самая фундаментальная часть шаблонов Django.
Если вы имеете в виду, что вам нужна поддержка Ajax, благодаря которой Javascript на странице постоянно обновляет такое содержимое в соответствии с тем, каким сервер хочет, чтобы это было в любой момент времени, я предлагаю изучить dojango , проект интеграции Dojo / Django - он еще не настолько развит, как каждый из Dojo и Django сам по себе (не версия 0,4 пока нет), но он уже полезен и полезен.
Обычная техника - оставить заполнитель div в сгенерированном контенте, а затем заполнить div на стороне клиента с помощью вызова AJAX из Javascript, который вы включаете в страницу.
Это дает вам преимущество, когда у вас есть кешируемая (быстрая загрузка) основная страница с отдельными динамическими битами. В зависимости от того, как вам нужны динамические биты, вы можете даже кэшировать их на более короткие промежутки времени.