Как легко написать собственные теги шаблонов в Django? - PullRequest
2 голосов
/ 22 февраля 2011

Написание тегов шаблонов не так просто в Django и включает в себя много стандартного кода. Какой наименее болезненный способ сделать это?

  • Есть ли для этого какие-нибудь библиотеки?
  • Есть ли какие-нибудь хитрости, не связанные со сторонними приложениями?
  • Каков ваш способ сделать это?

(я сделаю эту публикацию вики-сообществом, как только пойму, как это сделать.)

Ответы [ 3 ]

6 голосов
/ 22 февраля 2011

Попробуйте django-classy-tags https://github.com/ojii/django-classy-tags

4 голосов
/ 23 февраля 2011

Для этого есть несколько библиотек:

  • Джанго-templatetag сахара

    Использовал это раньше. Все упрощает, но я не могу понять, как с этим справиться, используя множество дополнительных аргументов.

    Пример использования ::

    ''' {% example_tag for val as asvar %} '''
    
    @tag(register, [
        Constant("for"), Variable(),
        Optional([Constant("as"), Name()]),
        ])
    def example_tag(context, val, asvar=None):
        if asvar:
            context[asvar] = val
            return ""
        else:
            return val
    
  • django-tagcon , оставлено первоначальным автором

  • django-ttag , вилка django-tagcon

    Эти два выглядят многообещающими из-за подхода на основе классов и поддержки аргументов ключевых слов (например, {% output limit=some_limit|default:1 offset=profile.offset %})

    Пример использования ::

    class Welcome(ttag.Tag):
        ''' {% welcome current_user fallback "Hello, anonymous." %} '''
        user = ttag.Arg(positional=True)
        fallback = ttag.Arg(default='Hi!')
    
        def output(self, data)
            name = data['user'].get_full_name()
            if name:
                return 'Hi, %s!' % name
            return data['fallback']
    

0 голосов
/ 20 октября 2011

Я использую декоратор fancy_tag: http://pypi.python.org/pypi/fancy_tag

Очень просто и мощно и поставляется с хорошей документацией.

Избавляется от всего этого шаблонного примера, когда вы просто хотите назначить выводтег шаблона к контекстной переменной.Также обрабатывает аргументы (переменной длины) и ключевые слова.

Гораздо проще в использовании, чем, например, django-templatetag-sugar.

Мне больше ничего не нужно, кроме встроенного включениятег оформитель.

...