我有一个 Django 模型对象,如下所示:
class myObj(models.Model):
A = models.TextField()
B = models.DateField()
C = models.ForeignKey(User)
我正在获取 myObjs 的查询集,如下所示:
mList = myObj.objects.all()
我还有一个用户字典,如下所示:
uDict = {1: "Hello", 2: "World"} //The keys of this dictionary correspond to the field myObj.C
在我看来,我正在使用上下文将 mList 和 uList 发送到我的 HTML 模板。
在我的模板中,我想在不同的行中列出所有的 mList。那些在 uDict 中具有匹配用户条目的 mLists 应该与 uList 中的匹配值一起出现。
我应该怎么做?在模板中,我可以轻松地遍历 mList。但我不知道如何将 myObj.C 与 uDict 键匹配。我知道这行不通:
{% for currObj in mList %}
{{currObj.A}} {{currObj.B}} {{uDict.currObj.C}}
{% endfor %}
...因为 uDict.currObj.C 不会正确计算。
那么做我想做的事情的最佳方法是什么?
请您参考如下方法:
不幸的是,您不能将 for 循环变量用作 Django 中字典的键。
您可以做的是将它们全部打包到某个列表或其他数据集中。像这样:
mList = myObj.objects.all()
uDict = {1: "Hello", 2: "World"}
data_for_template = []
for i in range(len(mList)):
data_for_template.append(
{
'mListObjA':mList.A,
'mListObjB':mList.B,
'uDictObj':uDict[i], # or i+1 for your example uDict
}
)
然后在您的模板中,您将能够以类似的方式访问这些数据。
{% for item in data_for_template %}
{{item.mListObjA}} {{item.mListObjB}} {{item.uDictObj}}
{% endfor %}
基本上,您应该尝试在 views.py 文件中为您的数据做大部分准备工作,以简化模板中的可访问性。
编辑:
根据您的评论,我接下来会尝试的事情:
views.py:
mList = myObj.objects.all()
uDict = {1: "Hello", 2: "World"}
data_for_template = []
for i in range(len(mList)):
data_for_template.append(
{
'mListObj':mList,
'uDictObj':uDict[i], # or i+1 for your example uDict
}
)
html
{% for item in data_for_template %}
{{item.mListObj.A}} {{item.mListObj.B}} {{item.uDictObj}}
{{item.mListObj.C.F.G}}
{% endfor %}
{{data_for_template.N.mListObj.C.F.G}} <!-- Where N is the index of whatever Object you wish to access -->
