如何将额外数据添加到Django模型以在模板中显示?

时间:2013-11-04 05:41:41

标签: django django-models django-templates django-views

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

2 个答案:

答案 0 :(得分:2)

替换以下行:

myModelList = myModel.objects.all()

使用:

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

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


或者,您想要的只是计数器,您可以在模板中使用forloop.counterforloop.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 %}