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

如何向Django模型添加额外数据以在模板中显示?,django,django-models,django-templates,django-views,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.ht

我的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 %}        
{%用于myModels%中的currModel}
{{currModel.myIntA}}
{{currModel.myIntB}}
{%endfor%}
替换以下行:

myModelList = myModel.objects.all()
与:

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



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

替换以下行:

myModelList = myModel.objects.all()
与:

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



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

不,这不会满足您的想法;请尝试以下方法:

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 %}      
{%用于currModel,在myModels%中为extra}
{{currModel.myIntA}}
{{extra}}
{%endfor%}
不,那不会做你想做的事;请尝试以下方法:

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 %}      
{%用于currModel,在myModels%中为extra}
{{currModel.myIntA}}
{{extra}}
{%endfor%}
Ok。这是有道理的。谢谢然而,我认为有一个复杂的问题使我无法使用您的解决方案。我的模型实际上是一个MPTT树结构:类myModel(MPTTModel)。我想为这个模板丰富这个树结构的每个元素,并使用{%recursetree%}通过丰富的对象递归。因此,我不认为用元组替换每个列表元素会在这里奏效(尽管老实说,我还没有尝试过)。你能建议我如何删除MPTT对象列表,这样就不会破坏它们的层次关系吗?请看这里的修订问题:Ok。这是有道理的。谢谢然而,我认为有一个复杂的问题使我无法使用您的解决方案。我的模型实际上是一个MPTT树结构:类myModel(MPTTModel)。我想为这个模板丰富这个树结构的每个元素,并使用{%recursetree%}通过丰富的对象递归。因此,我不认为用元组替换每个列表元素会在这里奏效(尽管老实说,我还没有尝试过)。你能建议我如何设置MPTT对象列表的中心,这样就不会破坏它们的层次关系吗?请参阅此处的修订问题: