Python 为循环嵌套的Django模板

Python 为循环嵌套的Django模板,python,django-templates,Python,Django Templates,我有两张桌子: Table1: [A-Foriegn Key, field1] Table2: [Table1-Foriegn Key, field2] 如果表2中有项目,我想显示一个具有表1字段1不同值的列表。在这个列表中,我想显示与表1的字段1对应的表2的所有元素 我正在努力: {% for t1 in Table1 %} Display field1 of t1 {% for t2 in Table2 %} Display field2 of t2. {%

我有两张桌子:

Table1: [A-Foriegn Key, field1]
Table2: [Table1-Foriegn Key, field2]
如果表2中有项目,我想显示一个具有表1字段1不同值的列表。在这个列表中,我想显示与表1的字段1对应的表2的所有元素

我正在努力:

{% 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   ║
╚════╩══════════════╩══════╝
我想在列表中显示:圣诞节和黑色星期五

单击列表中的元素,我想显示该特定事件的所有url。 就像点击圣诞节一样:应该显示image1\u url和image2\u url


我不想发出AJAX请求。

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

假设您有两个表Table1和Table2,其映射类似于Table1->Table2,Table2中的外键字段引用Table1,您可以执行如下操作:

table1 = Table1.objects.all() 
table2 = Table2.objects.all() 
return render('template_name.html',{'table1':table1, 'table2':table2})
您的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是表2中的行的对象,对应于它们在表1中的外键映射


希望这有帮助

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

假设您有两个表Table1和Table2,其映射类似于Table1->Table2,Table2中的外键字段引用Table1,您可以执行如下操作:

table1 = Table1.objects.all() 
table2 = Table2.objects.all() 
return render('template_name.html',{'table1':table1, 'table2':table2})
您的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是表2中的行的对象,对应于它们在表1中的外键映射

希望这有帮助

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)
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)

你们能在表格和样本输出中给出样本数据吗?我已经添加了样本数据。你们能在表格和样本输出中给出样本数据吗?我已经添加了样本数据。上面的答案有两个小的修正。可能不需要查询表2。此外,在模板中,我们不能在“全部”之后使用。这类似于在视图中使用“.items”,而在templates.table1Instace.table2_set中仅使用“items”。我可以从此列表中获取第一个元素以上答案的两个小更正。可能不需要查询表2。此外,在模板中,我们不能在“全部”之后使用。这类似于在视图中使用“.items”,在templates.table1Instace.table2_set中仅使用“items”。我可以从此列表中获取的第一个元素必须是items的queryset。s必须是items的queryset。