2

加重有向グラフは、Python の辞書の辞書として表されます。このようなもの(例):

digraph = {'a': {'b':2, 'c':3}, 'b': { 'a':1, 'd',2}}

私の問題は、この digraph オブジェクトを Django Template システムに渡すことです。この例では、'a'、'b'、'c'、'd' はグラフのノードであり、ダイグラフはこれらのノード間の接続を整数値で指定された各接続エッジの重みと共に表します。

一般的なノードnodeを考えてみましょう。

テンプレート内のdigraph.node.itemsにアクセスできません。どの辞書 D に対しても、D.itemsは適切に機能します。ただし、サブディクショナリのアイテムにアクセスしたい場合はそうではありません (上の有向グラフ)。これはまさに私が欲しいものです(しかしうまくいきません):

{% for node in node_list %}
  {% for adj_node,weight in digraph.node.items %}
    {{ adj_node }}, {{ weight }} <br/>
  {% endfor %}
{% endfor %}

adj_nodeweightは出力されません。

4

1 に答える 1

1

辞書から関心のある値を抽出する独自のフィルターを定義するオプションがあります: http://ralphminderhoud.com/posts/variable-as-dictionary-key-in-django-templates/

短いバージョン:

project/app/templatetags/dictionary_extras.py

from django import template
register = template.Library()

@register.filter(name='access')
def access(value, arg):
    return value[arg]

urls.py

url(r'^testing', 'views.vTestingLists', name='testing_lists'),

views.html

def vTestingLists(request):
    context= {'d': {'a':'apple', 'b': 'banana', 'm':'mango', 'e':'egg', 'c':'carrot'}}
    return render_to_response( 'testinglists.html', context )

という名前のテンプレートでtestinglists.html:

{% load dictionary_extras %}
{% for key in d %}
    {{ d|access:key }}
{% endfor %}

URLにアクセスする…/testingと、手仕事の成果を見ることができます。

これは私のコードではなく、Ralph Minderhoud (リンクされた記事の著者) の功績によるものです。このコードが、この回答から Django 1.1 環境への転写 (コピー/貼り付けではない) として機能することを確認しました。

于 2013-10-28T01:59:15.543 に答える