我有点陷入困境,试图绕着django模板。
我有2个对象,一个集群和一个节点
我想要一个简单的页面列出......
[Cluster 1]
[associated node 1]
[associated node 2]
[associated node 3]
[Cluster 2]
[associated node 4]
[associated node 5]
[associated node 6]
我一直在使用Django大约2天,所以如果我错过了这一点,请温柔一点:)
模特 -
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 :(得分: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。
答案 1 :(得分:1)
如果您描述了您遇到的问题,那将会很有帮助。但是,你不能在Django 1.1中这样做:
{% if node.cluster.id == cluster.id %}
...
{% endif %}
你必须做
{% ifequal node.cluster.id cluster.id %}
...
{% endifequal %}
当然,迭代这种关系的正确方法是rebus向你展示的方式。
答案 2 :(得分:0)
您可以将群集列表传递给模板,然后:
{% 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 %}