Произвольное количество позиционных аргументов в теге включения django? - PullRequest
3 голосов
/ 23 августа 2009

Я пытаюсь написать тег включения django, который принимает произвольное количество аргументов:

@register.inclusion_tag('so.html')
def table_field(*args):
fields = []
for arg in args:
    fields.append(arg)
return { 'fields': fields, }

Однако, когда я вызываю это из движка шаблонов django:

{% table_field form.hr form.bp form.o2_sat %}

Я получаю ошибку:

table_field takes 0 arguments

Это еще одно ограничение движка шаблонов django?

Ответы [ 5 ]

3 голосов
/ 20 августа 2010

Начиная с версии 1.2.1, вы можете передавать аргументы тегам включения.

Вот пример из моих модов для тегов голосования в django

@register.inclusion_tag("voting/vote_form.html", takes_context=True)
def vote_form(context, vote_object, vote_dict, score_dict):
    if isinstance(vote_dict, dict):

и шаблон выглядит так:

{% vote_form bookmark vote_dict score_dict %}

Что мне не нравится в этом, так это то, что нет возможности назвать аргументы, только привести их в порядок, но это работает.

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

Ваша попытка использовать * args не сработает, потому что # переданных аргументов проверяется функцией.

2 голосов
/ 23 августа 2009

Re: Я пытаюсь написать тег включения django, который принимает произвольное количество аргументов

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

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

@register.inclusion_tag('so.html')
def table_field(args):
    return { 'fields': [arg for arg in args], }

Тогда ваш шаблон выглядит так:

{% table_field whatever_was_passed_in_from_the_view %}

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

1 голос
/ 18 октября 2011

Текущая версия разработки предоставляет переменное количество аргументов для тега включения. Патч описан здесь:

https://code.djangoproject.com/ticket/13956

Это будет выпущено с 1.4, см. примечания к выпуску .

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

Полагаю, вам придется написать собственный тег шаблона.

0 голосов
/ 29 августа 2009

Это еще одно ограничение тегов включения django. В настоящее время в версии ствола django это невозможно.

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