2010-12-03 3 views
0
post = { sizes: [ { w:100, title="hello"}, {w:200, title="bye"} ] } 

Предположим, я передаю это своим шаблонам Django. Теперь я хочу, чтобы отобразить название, где ширина = 200. Как я могу сделать это, не делая это с перебором путь:Как сделать парсинг в шаблонах Django?

{{ post.sizes.1.title }} 

Я хочу сделать это разобранный путь.

ответ

2

Удобный способ сделать это с помощью тега шаблона фильтра.

from django.template import Library 

register = Library() 

@register.filter('titleofwidth') 
def titleofwidth(post, width): 
    """ 
    Get the title of a given width of a post. 

    Sample usage: {{ post|titleofwidth:200 }} 
    """ 

    for i in post['sizes']: 
     if i['w'] == width: 
      return i['title'] 
    return None 

Это должно идти в templatetags пакет, скажем, как postfilters.py и {% load postfilters %} в шаблоне.

Естественно, вы также можете изменить это, чтобы дать вам правильный объект sizes, и поэтому вы можете сделать {% with post|detailsofwidth:200 as postdetails %}{{ postdetails.something }}, {{ postdetails.title }}{% endwith %}.

0
{% for i in post.sizes %} 
    {% if i.w == 200 %}{{ i.title }}{% endif %} 
{% endfor %} 
Смежные вопросы