Django模板中的复杂变量名称

时间:2011-02-21 01:13:15

标签: django django-templates

我将坐标数据存储在一个简单的棋盘游戏应用程序的数据库中,我试图通过减少其中的循环来简化模板。

我的模板与目前的模板类似

{% 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的词典,其中包含像{'1-1':'Data About Item'}这样的键中的X和Y坐标。我希望能够直接从<td>内的那个dict进行查找,但我无法弄清楚是否可能。有点像:

{% 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 个答案:

答案 0 :(得分:2)

任何时候你发现自己在想“我需要在模板中做[这个复杂的事情]”,你的第一个答案应该是写一个自定义标签或过滤器。在这种情况下,您可能需要一个包含标记 - 也就是说,将if块与#Render Item Data 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()