Установить templatetag как переменную django - PullRequest
0 голосов
/ 18 декабря 2018

Я пытаюсь отфильтровать набор запросов django в теге шаблона, например:

@register.simple_tag
def splice(query, person_id):
    query2 = query.filter(personid=person_id)
    return query2

Затем в своем шаблоне я хотел бы передать недавно отфильтрованный набор запросов в html-файл include.Вот моя попытка:

{% with splice df person_id as x %}
   {% include 'includes/file.html' with df=x %}

Как я могу выполнить это правильно?Или у кого-нибудь есть идеи, как сделать это более эффективным способом?

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

Вам нужно изменить порядок передачи аргументов.Использование Django docs является хорошим примером.Затем можно вызвать тег шаблона из файла file.html.

Вызывающий файл {% include 'includes/file.html' with df=df person_id=person_id %}

file.html {% load my_template_tags %} {{df|slice:person_id}}

0 голосов
/ 18 декабря 2018

Вам не нужно with там;простой тег может добавлять свои данные в контекст напрямую с помощью as.

{% splice df person_id as x %}

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

@register.inclusion_tag('template/file.html')
def splice_include(query, person_id):
    query2 = query.filter(personid=person_id)
    return {'df': x}

И теперь вы можете использовать его напрямую:

{% splice_include df person_id %}

без необходимости отдельного include.

...