Написание тега шаблона в Django
-
05-07-2019 - |
Вопрос
Я пытаюсь настроить CMS, написанную на Django. Редакторы контента недостаточно гибки, поэтому я пытаюсь найти лучшее решение.
Без лишних объяснений, я бы хотел, чтобы это было немного похоже на django-better-chunks или django-flatblocks
. Вы устанавливаете редактируемую область полностью из шаблона. Я хочу связать эти редактируемые области со смесью строк и экземпляров объектов. Одним примером может быть наличие нескольких редактируемых областей на основе одного продукта:
{% block product_instance "title" %}
{% block product_instance "product description" %}
Таким образом, если у вас есть представление с другим продуктом как product_instance
, эти два блока
будут показывать разные данные. Я также хотел бы видеть использование для блоков всего сайта, которые проходят только через строковую часть. По сути, я хотел бы иметь возможность передавать идентификаторы 1-бесконечности.
Но я действительно борюсь здесь с двух сторон:
<Ол> Как определить связь между смешанным идентификатором и фактическим содержимым? block
" пример? У меня есть чувство, что здесь могут отображаться типы контента, но я действительно не знаю, с чего начать!
И как мне написать тег шаблона, чтобы прочитать приведенный выше синтаксис и преобразовать его в объект для рендеринга?
Решение
для этого вы можете создать тег включения и использовать его следующим образом:
{% load my_tags %}
{% product bicycle <extra vars ...> %}
Чтобы определить тег, добавьте в ваше приложение / templatetags / mytags.py:
@register.inclusion_tag('results.html')
def product(item, *extra):
#maybe repackage extra variables
#and add them to the returned dictionary
item_form = ItemForm(item) #form.ModelForm instance
return {'item': item, 'item_form':item_form, ...}
Тогда вам понадобится шаблон, который возвращает HTML для элемента:
<h1>{{item.title}}</h1>
{{item_form}}
... add some conditional statements depending on extra vars