2016-11-05 3 views
2

Я не могу понять, как отправить несколько аргументов в настраиваемый фильтр шаблонов.Django - строка из переменной внутри тега шаблона

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

CUSTOM ШАБЛОН ФИЛЬТР

@register.filter 
def is_scheduled(product_id,dayhour): 
    day,hour = dayhour.split(',') 
    return Product.objects.get(id=product_id).is_scheduled(day,hour) 

NORMAL ИСПОЛЬЗОВАНИЕ

{% if product.id|is_scheduled:"7,22" %}...{% endif %} 

Линия выше будет работать правильно, как я ставлю два аргумента - 7 и 22 в фильтр (проверено - работает) , Проблема в том, что я хочу поместить переменные вместо обычного текста/строки в качестве аргумента.

В моем шаблоне:

{% with day=forloop.counter|add:"-2" hour=forloop.parentloop.counter|add:"-2" %} 

Теперь я хочу использовать {{ day }} и {{ hour }} в качестве аргументов.

Я попытался, например:

{% if product.id|is_scheduled:"{{ day }},{{ hour }}" %}...{% endif %} 

Но это поднимает:

Исключение Значение: неверный буквальным для междунар() с основанием 10: {{день}} '

Есть ли у вас идеи?

ответ

3

Вы не нуждаетесь в {{}}, когда находитесь внутри {% %}. Просто используйте имена непосредственно в этом теге и используйте синтаксис шаблона строки concat add.

В случае day и hour являются строками, преобразование типов в строку будет необходимо до concating строки:

{% with day|stringformat:"s" as sday hour|stringformat:"s" as shour %} 
    {% with sday|add:","|add:shour as arg %} 
     {% if product.id|is_scheduled:arg %}...{% endif %} 
    {% endwith %} 
{% endwith %} 
+0

К сожалению, это не работает. Я не знаю, почему. Вероятно, день и час являются целыми числами. Он возвращает: Исключительное значение: \t Объект «int» не имеет атрибута «split», и если я печатаю переменную dayhour, она печатает 0 вместо «0,2», например. –

+0

Я обновил ответ, чтобы включить преобразование типа –

+0

Похоже на хороший подход, но есть некоторые проблемы, возможно, с синтаксисом. u'with 'получил недопустимый токен: u'hour | stringformat: "s"' Я пытаюсь выяснить, в чем суть ошибки. –

 Смежные вопросы

  • Нет связанных вопросов^_^