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。