Django模板嵌套for循环

时间:2017-06-27 06:28:56

标签: python django-templates

我有两张桌子:

Table1: [A-Foriegn Key, field1]
Table2: [Table1-Foriegn Key, field2]

如果Table2中存在项目,我想显示具有Table1 field1的不同值的列表。在该列表中,我想显示Table2的所有元素,对应于Table1的field1。

我在尝试:

{% for t1 in Table1 %}
   Display field1 of t1
   {% for t2 in Table2 %}
      Display field2 of t2.
   {% endfor %}
{% endfor %}

表1:

╔════╦══════════════╦══════╗
║ Id ║  EventName   ║ FK   ║
╠════╬══════════════╬══════╣
║  1 ║ Christmas    ║  56  ║
║  2 ║ Black Friday ║  18  ║
╚════╩══════════════╩══════╝

表2:

╔════╦══════════════╦══════╗
║ ID ║  Image       ║ FK   ║
╠════╬══════════════╬══════╣
║  1 ║ image1_url   ║  1   ║
║  2 ║ image2_url   ║  1   ║
║  3 ║ image3_url   ║  2   ║
║  4 ║ image4_url   ║  2   ║
╚════╩══════════════╩══════╝

我想在列表中显示:圣诞节和BlackFriday。

点击列表中的元素,我想显示该特定事件的所有网址。 就像点击圣诞节一样:应该显示image1_url和image2_url。

我不想发出AJAX请求。

2 个答案:

答案 0 :(得分:2)

您可以在模板中使用外键映射来引用对象。

假设您有两个表Table1和Table2,其映射类似于Table1 - > Table2,Table2中的外键字段引用Table1,你可以这样做:

您的views.py将是这样的:

table1 = Table1.objects.all() 
table2 = Table2.objects.all() 
return render('template_name.html',{'table1':table1, 'table2':table2})

然后你的html模板就像:

{% for table1Instace in table1 %}

    {% for table2Instance in table1Instace.table2_set.all %}

    <!--Print table elements here-->

    {% endfor %}

{% endfor %}

其中table2Instance将是table2中行的对象,对应于table1中的外键映射。

希望这有帮助!

答案 1 :(得分:0)

models.py

class Category(models.Model):
    name = models.CharField(max_length=45, blank=True)

class Items(models.Model):
    name = models.CharField(max_length=45, blank=True)
    rate = models.FloatField(default=0)
    category_id = models.ForeignKey(Category)

views.py

def test_category(request):
    s = Category.objects.all()
    return_dict = {
        's' :   s        
    }
    return render(request, 'base.html', return_dict)

{% for item in s%}
    {{ item.name }}
    {% for x in item.items_set.all %}
        -- {{ x.name }}
    {% endfor %}
{% endfor %}