2011-02-21 18 views
0

私は単純なボードゲームアプリケーション用のデータベースに座標データを保存していますが、テンプレートを単純化しようとしています。Djangoテンプレートでの複雑な変数名

マイテンプレートは、この現在

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

に似たものであり、XとYが{'1-1':'Data About Item'}のようなキーの座標が含まれitemLocationsと呼ばれる辞書を渡すと仮定イムです。私は<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 %} 

申し訳ありません、その質問が蛇行すれば、さらに詳しい情報を提供することができます。

答えて

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()

+0

ありがとう、私はth過去のカスタムタグを取得するには過去のことがありましたが、これを試してみると完璧な状況でした。 – HurnsMobile

関連する問題