开发者

Complex Variable Names In Django Templates

开发者 https://www.devze.com 2023-02-12 10:20 出处:网络
I am storing coordinate data in a database for a simple board game app and I\'m attempting to simplify the template by doing fewer loops in it.

I am storing coordinate data in a database for a simple board game app and I'm attempting to simplify the template by doing fewer loops in it.

My template is something similar to this currently

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

And assuming im passing a dict called itemLocations that contains an X and Y coordinate in the key l开发者_StackOverflow中文版ike {'1-1':'Data About Item'}. I'd like to be able to do lookups directly from that dict inside of the <td> but I cant figure out if thats possible. Something along the lines of:

{% 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 %}

Sorry if that question meanders, id be glad to provide any further info.


Any time you find yourself thinking "I need to do [this complex thing] in a template", your first answer should be to write a custom tag or filter. In this case, you probably want an inclusion tag - that is, move the if block with the #Render Item Data In This Space#" markup into its own separate template fragment file, and write a tag along these lines:

@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

Now your template fragment can just do {% if location %}whatever{% endif %}, and your original template has {% render_item_location itemLocations x y %}.

Note I've made a tweak to your code - with a dictionary, x in my_dict searches the keys anyway, so no need to explicitly call keys().

0

精彩评论

暂无评论...
验证码 换一张
取 消