2

我的 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 %}        
4

2 回答 2

2

替换以下行:

myModelList = myModel.objects.all()

和:

myModelList = list(myModel.objects.all())

否则,每次访问时都会执行新查询myModelList[i];你失去了你所做的改变。


或者,您想要的只是计数器,您可以在模板中使用forloop.counter或。forloop.counter0

于 2013-11-04T05:44:34.080 回答
2

不,那不会做你所想的;试试这个:

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 %}      
于 2013-11-04T05:47:11.370 回答