Django 1.1模板问题

时间:2010-06-09 13:32:45

标签: django django-templates

我有点陷入困境,试图绕着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>

有什么想法吗?

3 个答案:

答案 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。

Following relationships "backward"

Many-to-one relationships

答案 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 %}