我将坐标数据存储在一个简单的棋盘游戏应用程序的数据库中,我试图通过减少其中的循环来简化模板。
我的模板与目前的模板类似
{% 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 %}
对不起,如果这个问题蜿蜒,我很乐意提供任何进一步的信息。
答案 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()
。