如何使用 django 模板以特定顺序呈现 django 模型实例?
Posted
技术标签:
【中文标题】如何使用 django 模板以特定顺序呈现 django 模型实例?【英文标题】:How to render django model instances in particular order using django templates? 【发布时间】:2021-10-14 06:53:56 【问题描述】:我在我的 html 中有一个 div,每个 id 都是这样的:
<div class="row">
<div class="myclass" id="id1"></div>
<div class="myclass" id="id2"></div>
<div class="myclass" id="id3"></div>
<div class="myclass" id="id4"></div>
</div>
现在如何按下面指定的顺序渲染模型实例?
行的第一个 div 中的第一个实例
行的第二个 div 中的第二个实例
行的第三个 div 中的第三个实例
行的第四个 div 中的第四个实例
第五个实例在该行的第一个 div 中,依此类推。
任何帮助都将不胜感激,即使它使用的是 javascript 希望它会更简单。
【问题讨论】:
那么你究竟传递给模板的是什么。可以分享一下相关观点吗? 我通过 model.objects.all () 将模型的所有实例传递给它,并将其传递给上下文以便将其访问到模板中 【参考方案1】:在视图中,您可以使用以下方法“准备”数据:
def my_view(request):
d = 4 # items per row
items = list(MyModel.objects.all())
items = [items[i:i+d] for i in range(0, len(items), d)]
return render(request, 'name-of-template.html', 'items': items)
然后我们可以枚举子列表,并且对于每个子列表,可以枚举该子列表中的项目,所以:
% for sublist in items %
<div class="row">
% for item in sublist %
<div class="myclass"> item </div>
% endfor %
</div>
% endfor %
这里的queryset
是您传递给模板渲染引擎的model.objects.all()
。
【讨论】:
我确实枚举了这些项目,但它呈现的 div 数量等于模型实例数的 len @PapisDiallo:你应该在视图中切片,所以视图看起来像queryset = MyModel.objects.all()[:5]
。
那么我将无法渲染模型的所有实例,这就是我想要的。也许问题不是很清楚。在第一个 div 中我想要第一个、第五个、第九个实例,在第二个中我想要第二个、第六个、第十个项目,依此类推
@PapisDiallo:所以你想使用包含五个元素的行?
不只是四个,但应该像我在问题中所说的那样显示元素。第一个 div 中的数据库中的第一个元素,第二个 div 中的第二个元素 第三个 div 中的第三个元素第四个 div 中的第四个元素 现在第五个元素应该转到第一个 div 和第六个第二个 div 和所有其他元素将遵循这个逻辑【参考方案2】:
在您的 html 文件中:
<!-- some code -->
<div class="row">
% for div_id in range(4) %
<div class="myclass" id="id div_id + 1 ">
% for instance in chosenInstances(instances, div_id + 1) %
instance
% endfor %
</div>
% endfor %
</div>
<!-- some code -->
在python中:
def chosenInstances(instances, div_id):
return [instance for index, instance in enumerate(instances) if (index % 4 + 1) == div_id]
render_template("htmlfile.html", chosenInstances=chosenInstances)
【讨论】:
你的回答是正确的。但问题是 django 模板不接受带参数的传递函数,而且这个函数不仅包含参数,而且第二个也是动态的。我正在考虑使用过滤器,但我根本不会动态。 我将 Django 与 Jinja2 不匹配 ?♂️ 我仍在尝试通过结合 2 个答案来修复。以上是关于如何使用 django 模板以特定顺序呈现 django 模型实例?的主要内容,如果未能解决你的问题,请参考以下文章