2010-06-09 116 views
0

我有點卡住試圖讓我的頭繞着一個Django模板。Django 1.1模板問題

我有兩個對象,一個集羣和節點

我想一個簡單的頁面,列出...

[Cluster 1] 
[associated node 1] 
[associated node 2] 
[associated node 3] 

[Cluster 2] 
[associated node 4] 
[associated node 5] 
[associated node 6] 

我一直在使用Django約2天,所以如果我」 VE忽略了一點,請溫柔:)

模型 -

class Node(models.Model): 
    name = models.CharField(max_length=30) 
    description = models.TextField() 
    cluster = models.ForeignKey(Cluster) 

    def __unicode__(self): 
     return self.name 

class Cluster(models.Model): 
    name = models.CharField(max_length=30) 
    description = models.TextField() 

    def __unicode__(self): 
     return self.name 

視圖 -

def DSAList(request): 

    clusterlist = Cluster.objects.all() 
    nodelist = Node.objects.all() 

    t = loader.get_template('dsalist.html') 
    v = Context({ 
       'CLUSTERLIST' : clusterlist, 
       'NODELIST' : nodelist, 
       }) 

    return HttpResponse(t.render(v)) 

模板 -

<body> 
    <TABLE> 
    {% for cluster in CLUSTERLIST %} 
     <tr> 
     <TD>{{ cluster.name }}</TD> 
       {% for node in NODELIST %} 
        {% if node.cluster.id == cluster.id %} 
        <tr> 
         <TD>{{ node.name }}</TD> 
        </tr> 
        {% endif %} 
       {% endfor %} 
     </tr> 
    {% endfor %} 
    </TABLE> 
</body> 

任何想法?

+0

您可以訪問關聯到'Node'對象'通過'cluster_obj.node_set'創建簇對象。請參閱文檔:http://docs.djangoproject.com/en/1.1/topics/db/queries/#following-relationships-backward – 2010-06-09 13:41:08

回答

4
{% for cluster in CLUSTERLIST %} 
    <tr> 
     <td>{{ cluster.name }}</td> 
    </tr> 
    {% for node in cluster.node_set.all %} 
     <tr> 
      <td>{{ node.name }}</td> 
     </tr> 
    {% endfor %} 
{% endfor %} 

編輯:如果你想要在它自己的行下面的每個節點,你需要編輯你的HTML一點。

Following relationships "backward"

Many-to-one relationships

+0

太棒了,正是我以後的事情! – MattY 2010-06-09 13:57:51

1

如果您想說明您所遇到什麼問題,這本來是有幫助的。但是,你不能在Django 1.1做到這一點:

{% if node.cluster.id == cluster.id %} 
... 
{% endif %} 

你要做

{% ifequal node.cluster.id cluster.id %} 
... 
{% endifequal %} 

當然,通過這種關係的迭代以正確的方式畫謎已經顯示出你的方式。

+0

快照,看到它是沒有必要的,讓我忘了提及,它甚至沒有在V1.1支持 – 2010-06-09 19:26:20

0

您只需通過ClusterList中到模板,然後:

{% for node in cluster.node_set.all %} 
    <tr> 
     <TD>{{ node.name }}</TD> 
    </tr> 
{% endfor %} 

你的方法應該工作以及:

{% for node in NODELIST %} 
    {% ifequal node.cluster.id cluster.id %} 
     <tr> 
      <TD>{{ node.name }}</TD> 
      </tr> 
    {% endifequal %} 
{% endfor %}