【问题标题】:Django 1.1 template questionDjango 1.1 模板问题
【发布时间】:2010-06-09 13:32:45
【问题描述】:

我有点难以理解 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>

有什么想法吗?

【问题讨论】:

标签: django django-templates


【解决方案1】:
{% 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

【讨论】:

    【解决方案2】:

    如果您能描述您遇到的问题,将会很有帮助。但是,你不能在 Django 1.1 中这样做:

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

    你必须这样做

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

    当然,迭代这种关系的正确方法是 rebus 向您展示的方式。

    【讨论】:

    • span,看到没有必要,我忘了提到 v1.1 甚至不支持它
    【解决方案3】:

    您可以将集群列表传递给模板,然后:

    {% 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 %}
    

    【讨论】:

      猜你喜欢
      • 2011-03-18
      • 1970-01-01
      • 2010-11-16
      • 2012-01-26
      • 2012-05-14
      • 2015-06-19
      • 2015-11-15
      • 2020-02-22
      • 2017-05-28
      相关资源
      最近更新 更多