2016-07-12 2 views
0

У меня есть собственный фильтр шаблонов в Django, могу ли я получить доступ к другой переменной шаблона внутри фильтра шаблона.Django custom filter look up template variable

{{lookup_dict}} 

{% for a in my_list %} 
    {{a|my_filter:1}} 
{% endfor %} 

@register.filter 
def my_filter(obj, val): 
    # I need to access "lookup_dict" here 
    return ... 
+0

Я думаю, что ответ либо нет, либо да с невероятной трудностью. Если вы сталкиваетесь со многими проблемами, подобными этому, я предлагаю задуматься о том, как смотреть в шаблоны Jinja2, что гораздо более гибко с args и kwargs. – Steve

ответ

1

Решение изменить тег в тег шаблона вместо фильтра - фильтры должны быть атомарной и не зависит от контекста. Нечто подобное должно работать:

# takes_context allows you access to the outer template context 
@register.simple_tag(takes_context=True) 
def my_tag(context, obj, val): 
    lookup_dict = context['lookup_obj'] 
    # Do something with lookup_dict, obj, and val 
    # Return something that will be rendered in the template 
    return ... 

Тогда в шаблоне:

{% for a in my_list %} 
    {% my_tag a 1 %} 
{% endfor %} 

Обратите внимание, что теперь это тег ({%) вместо переменной ({{).