我的Django模型:
class myModel(models.Model):
myIntA = models.IntegerField(default=0)
我的观点:
myModelList = myModel.objects.all()
for i in range(len(myModelList)):
myModelList[i].myIntB = i
return render(
request,
'myApp/myTemplate.html',
Context(
{
"myModels": myModelList,
}
)
)
上述合法吗?你可以看到我为每个myModel对象添加了一个变量myIntB。 但是,当我尝试在下面的模板中打印myIntB时,没有任何显示。 如何从模板访问myIntB?它不是我为此模型定义的字段,也不是我想要的字段。我只是希望在渲染此特定模板时使用此额外变量来扩充myModel。
我的模板:
{% for currModel in myModels %}
{{currModel.myIntA}}<br/>
{{currModel.myIntB}}<br/>
{% endfor %}
答案 0 :(得分:2)
替换以下行:
myModelList = myModel.objects.all()
使用:
myModelList = list(myModel.objects.all())
否则,每次访问myModelList[i]
时都会执行新查询;你失去了你所做的改变。
或者,您想要的只是计数器,您可以在模板中使用forloop.counter
或forloop.counter0
。
答案 1 :(得分:1)
不,这不会做你想的;试试这个:
enriched_models = []
myModelList = myModel.objects.all()
for i in myModelList:
enriched_models.append((i, 'foo'))
return render(request, 'myApp/myTemplate.html', {"myModels": enriched_models})
然后在你的模板中:
{% for currModel,extra in myModels %}
{{ currModel.myIntA }}<br/>
{{ extra }}<br/>
{% endfor %}