пользовательский шаблон оператора - PullRequest
0 голосов
/ 09 сентября 2010

Возможно ли это?

Я знаю о фильтрах, но возможно ли создать что-то вроде этого:

{% if 75 is_divisible_by 5 %}

Это выглядит намного лучше, чем:

{% if 75|is_divisible_by:5 %}

(это концептуальный вопрос, is_divisible_by - просто пример)

1 Ответ

0 голосов
/ 09 сентября 2010

Нет, нет способа сделать то, что вы просите.

(Осторожно: тангенциальный) Если, однако, вы хотите отобразить только значение is_divisible_by 75 5, вы можете определить пользовательский тег шаблона. Примерно так:

@register.tag('is_divisible_by')
def is_divisible_by(_parser, token):
    try:
        _tag_name, dividend, divisor = token.split_contents()
    except ValueError:
        raise template.TemplateSyntaxError, \ 
            "%r tag requires exactly two arguments" % token.contents.split()[0]

    return IsDivisibleBynode(dividend, divisor)

class IsDivisibleBynode(template.Node):
    def __init__(self, dividend, divisor):
        self.dividend = template.Variable(dividend)
        self.divisor = template.Variable(divisor)

    def render(self, context):
        return (int(self.dividend.literal)  % int(self.divisor.literal) == 0)

Это может быть использовано в таком шаблоне:

<p>{% is_divisible_by 75 5 %}</p>

Конечно, это напечатает только True, что не то, что вам нужно. Я не мог найти способ объединить это с условием if. Возможно, кто-то с лучшим шаблоном тега fu сможет рассказать нам, как это сделать.

...