2010-06-09 2 views
0

Я немного застреваю, пытаясь окунуться в шаблон django.Django 1.1 template question

У меня есть 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

Вы можете получить доступ к 'Node' объекты, связанные к' Объект Cluster' через 'cluster_obj.node_set'. См. Документацию: http://docs.djangoproject.com/en/1.1/topics/db/queries/#following-relationships-backward –

ответ

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

1

Было бы полезно, если бы вы описали, какие проблемы вы испытываете. Но вы не можете сделать это в Django 1.1:

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

Вы должны сделать

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

Конечно, правильный способ перебирать такого рода отношений является способ ребус показал вам ,

+0

щелчок, видя, что это было лишним, заставило меня забыть упомянуть, что он даже не поддерживался в версии 1.1. –

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