Как я могу сделать подробный шаблонный тег в Django? - PullRequest
0 голосов
/ 22 августа 2010

У меня есть следующий тег включения:

@register.inclusion_tag('bouts/fighter/_fighter_bout_list.html')
def fighter_bout_list(list, header, fighter, has, empty):
    return {
            'list' : list,
            'header': header,
            'fighter': fighter,
            'has' : has,
            'empty' : empty,
    }

Чтобы использовать его, я могу включить в свой шаблон следующее:

{% fighter_bout_list wins "Wins" fighter "beat" "has no wins!" %}

Однако я бы хотел сделать свой тегудобочитаемым, поэтому легче увидеть, что делает код.В идеале я хотел бы использовать это для моего ввода:

{% fighter_bout_list list=wins header="Wins" fighter=fighter has="beat" empty="has no wins!" %}

Каков наилучший (или даже просто хороший!) Способ сделать это?

1 Ответ

1 голос
/ 23 августа 2010

Изменить систему шаблонов Django, чтобы делать то, что вы хотите, было бы чрезвычайно сложно;если вы хотите сделать это, начните с полного понимания модуля django.template .Честно говоря, я бы не рекомендовал создавать теги, которые использовали бы другой способ обработки параметров, чем все другие существующие теги, - это могло бы сбить с толку пользователей, которым приходится работать с тегами.

Но еслиВ любом случае вы настаиваете на этом, вам просто нужно, чтобы ваш собственный тег шаблона анализировал его параметры по отдельности, чтобы обеспечить обслуживание.Что-то вроде этого должно сработать:

def fixit( argument ):
    """Strip off any leading 'word=' noise words from argument"""
    result = argument.split('=')[-1]
    if result[0] == '"' and result[-1] == '"': 
        result = result[1:-2]
    return result

@register.inclusion_tag('bouts/fighter/_fighter_bout_list.html')
def fighter_bout_list(list, header, fighter, has, empty):
    return {
            'list' : fixit(list),
            'header': fixit(header),
            'fighter': fixit(fighter),
            'has' : fixit(has),
            'empty' : fixit(empty),
    }

Отредактировано

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

Опять же, я настоятельно рекомендую против такого подхода.Смысл тега шаблона заключается в том, чтобы сделать что-то, что не может быть легко сделано с существующими тегами шаблона, но он все еще является частью шаблона и действительно должен быть инструментом для человека, достаточно технического, чтобы использовать редактор HTML.Я пытаюсь представить пример использования предложенного вами тега, в котором он будет использоваться несколько раз на сайте.Небольшая документация и пример были бы намного дешевле, чем пытаться реализовать аргументы ключевого слова для тега шаблона в системе, которая не использует аргументы ключевого слова.

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