Сложные имена переменных в шаблонах Django - PullRequest
0 голосов
/ 21 февраля 2011

Я храню данные о координатах в базе данных для простого приложения для настольных игр и пытаюсь упростить шаблон, делая в нем меньше циклов.

Мой шаблон похож на этот

{% for y in yrange %}
    <tr>
       {%for x in xrange %}
           <td class='mapTile _{{x}}-{{y}}' data-y='{{y}}' data-x='{{x}}'>
           </td>
       {%endfor%}
    </tr>
{% endfor %}

И при условии, что я передаю дикт, называемый itemLocations, который содержит координаты X и Y в ключе, например {'1-1':'Data About Item'}. Я хотел бы иметь возможность выполнять поиск непосредственно по этому указанию внутри <td>, но я не могу понять, возможно ли это. Что-то вроде:

{% for y in yrange %}
    <tr>
       {%for x in xrange %}
           <td class='mapTile _{{x}}-{{y}}' data-y='{{y}}' data-x='{{x}}'>
               {% if x + '-' + y in itemLocations.keys %}
                   #Render Item Data In This Space#
               {% endif %}
           </td>
       {%endfor%}
    </tr>
{% endfor %}

Извините, если этот вопрос изменится, я был бы рад предоставить любую дополнительную информацию.

1 Ответ

2 голосов
/ 21 февраля 2011

Каждый раз, когда вы обнаруживаете, что думаете: «Мне нужно сделать [эту сложную вещь] в шаблоне», ваш первый ответ должен состоять в том, чтобы написать собственный тег или фильтр.В этом случае вам, вероятно, понадобится тег включения, т. Е. Переместите блок if с разметкой #Render Item In This Space # "в свой отдельный файл фрагмента шаблона и напишите тег в следующих строках:

@register.inclusion_tag('_render_item_location.html')
def render_item_location(locations, x, y):
    key = "%s-%s" % (x, y)
    if key in locations:
        context = {'location': location[key]}
    else:
        context = {}
    return context

Теперь ваш фрагмент шаблона может просто сделать {% if location %}whatever{% endif %}, а ваш исходный шаблон имеет {% render_item_location itemLocations x y %}.

Примечание. Я сделал поправку к вашему коду - со словарем, x in my_dict все равно ищет ключи, поэтому нет необходимости явно вызывать keys().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...