在我的Django模板中,我试图在for循环中创建一个for循环。我试图使用其中一个字段的结果作为构造函数的第二个列表的名称。
我有两个对象成功传递给我的模板:
sectList = {"Id": 1, "Section": "Home", "Identifier": "homeList"}
homeList = {"Id": 1, "Title": "Home", "Url": "home/",
"Id": 2, "Title": "My Account", "Url": "account/",
"Id": 3, "Title": "Full List", "Url": "fullList/",}
在我的模板中,我有:
<ul>
{% for section in sectList %}
{% autoescape off %}
<li class="middle_table_li">
<table class="middle_table">
<tr>
<td colspan="2" class="middle_table_cell">
<a href="" class="middle_a_dark">
{{ section.Identifier }}
</a>
</td>
</tr>
<tr>
{% for view in section.Identifier %}
<div style="padding: 0px; margin: 0px; width: 100%;">
{{ view.title }}
<table style="text-align: left;">
<tr>
<td>
<a href="{{ view.url }}" class="left_a_light">{{ view.title }}</a>
</td>
</tr>
</table>
</div>
{% endfor %}
</tr>
</table>
</li>
{% endautoescape %}
{% endfor %}
</ul>
当我使用“ {%for section inIdentifier%} ”时, view.title 会返回“homeList”字样,每次迭代分割一个字符(h,o,m,e等)。当我尝试“ {%for {{section.Identifier}}}}}} 时,它会给我以下错误:
TemplateSyntaxError at /
Could not parse the remainder: '{{section.Identifier}}' from '{{section.Identifier}}'
我的问题是如何在for循环的构造函数中使用一个查询集的结果?在模板中,section.Identifier ='homeList',并且视图成功发送homeList数据,但不是使用视图中的homeList变量,而是将字符串拆分为列表,如list(“homeList”) ,结果是每一行都包含单词 homeList 中的单个字符。在常规的python代码中,我可以使用类似exec的东西来执行字符串作为代码,但我不确定如何在django模板中执行此操作,如果它甚至可能的话?
编辑#1(仅供参考,所有数据都成功传递给模板)
的 views.py 的的
# -*- coding: utf-8 -*-
from django.shortcuts import render
from django.db import connection, transaction
from app_HomeView.models import HomeList
from view_LeftPanel.models import LeftPanelList
def HomeView(request):
homeList = HomeList.objects.all().order_by("title")
cursor = connection.cursor()
cursor.execute("SELECT * FROM view_leftpanelview_sectionlist ORDER BY Id;")
desc = cursor.description
sectList = [dict(zip([col[0] for col in desc], row)) for row in cursor.fetchall()]
return render(request, "index.html", {"homeList": homeList,
"sectList": sectList,})
答案 0 :(得分:1)
我会说该集合应该更像
sectList = {"Id": 1, "Section": "Home",
"Identifier": {"Id": 1, "Title": "Home",
"Url": "home/","Id": 2, "Title": "My Account",
"Url": "account/","Id": 3, "Title": "Full List",
"Url": "fullList/",}}
你看 - “标识符”:“homeList”实际上并不是你第二个列表的链接。它只是一个道具。名称和价值。
答案 1 :(得分:1)
是你可以,但你的视图代码传递了错误的值,这就是为什么它不起作用。你有:
sectList = [{"Id": 1, "Section": "Home", "Identifier": "homeList"}]
然后在模板中,在第一个循环之后,section.Identifier
的结果显然是"homeList"
,所以就像你运行一样:
for i in "homeList":
print i
它将打印出“homeList”字符串的每个字符。
所以你需要做的是将homeList
的列表嵌套在secList
中,你的secList
应该是这样的:
sectList = [{
"Id": 1, "Section": "Home", "Identifier": [ # Identifier should be a list
{"Id": 1, "Title": "Home", "Url": "home/"},
{"Id": 2, "Title": "About", "Url": "about/"}
]
}]
这是你的挑战,对吧?