Как мне выполнить синтаксический анализ в шаблонах Django? - PullRequest
0 голосов
/ 03 декабря 2010
post = { sizes: [ { w:100, title="hello"}, {w:200, title="bye"} ] }

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

{{ post.sizes.1.title }}

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

Ответы [ 2 ]

2 голосов
/ 03 декабря 2010

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

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 голосов
/ 03 декабря 2010
{% for i in post.sizes %}
    {% if i.w == 200 %}{{ i.title }}{% endif %}
{% endfor %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...