Написание тега шаблона в Django - PullRequest
1 голос
/ 29 июля 2009

Я пытаюсь настроить CMS, написанную на Django. Редакторы контента недостаточно гибки, поэтому я пытаюсь найти лучшее решение.

Без лишних объяснений, я бы хотел, чтобы это было немного похоже на django-better-chunks или django-flatblocks. Вы устанавливаете редактируемую область полностью из шаблона. Я хочу связать эти редактируемые области со смесью строк и экземпляров объектов. Одним примером может быть наличие нескольких редактируемых областей на основе одного продукта:

{% block product_instance "title" %}
{% block product_instance "product description" %}

Таким образом, если у вас есть представление с другим продуктом как product_instance, эти два blocks будут показывать разные данные. Я также хотел бы видеть использование для блоков всего сайта, которые проходят только через строковую часть. По сути, я хотел бы иметь возможность передавать идентификаторы 1-бесконечности.

Но я действительно борюсь здесь с двух сторон:

  1. Как определить связь между смешанным идентификатором и фактическим содержимым экземпляра "block"? У меня есть чувство, что здесь могут отображаться типы контента, но я не знаю, с чего начать!

  2. И как мне написать тег шаблона, чтобы прочитать приведенный выше синтаксис и преобразовать его в объект для рендеринга?

1 Ответ

2 голосов
/ 01 декабря 2009

для этого вы можете создать тег включения и использовать его как:

{% 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
...