我可以在 Django 模板中获取特定对象的属性吗?

Posted

技术标签:

【中文标题】我可以在 Django 模板中获取特定对象的属性吗?【英文标题】:Can I get the property of a specific object in a Django template? 【发布时间】:2021-04-17 17:38:43 【问题描述】:

我在我的项目中使用 django-filters。假设我在搜索后得到了这个地址:

?title=我的标题&ms=8

如您所见,我搜索了“我的标题”和用户视为“我的手稿”但其get 参数(和 ID)为 8 的手稿。

现在,我想在我的模板中添加一个礼貌的“您搜索过”字段。如何显示该手稿的标题而不是其 ID?

我的视图中已经有了 ms 对象:

mstunes = MsTune.objects.all()
ms = Manuscript.objects.all() <- manuscripts
f = MsTuneFilter(request.GET, queryset=MsTune.objects.all())
return render(request, 'manuscript/mstune_list.html', 'mstunes': mstunes, 'f': f, 'request':request, 'ms': ms)

我确实可以使用ms.all 访问它们。是否可以用伪代码做一些事情,例如:

show the ms.title of the ms object with id = request.GET.ms

?

我的看法:

def MsTuneList(request):

mstunes = MsTune.objects.all()
ms = Manuscript.objects.all() # can I get the ms.id from the request, with, say, request.ms, and then use it with get(id=ms)?
f = MsTuneFilter(request.GET, queryset=MsTune.objects.all())
return render(request, 'manuscript/mstune_list.html', 'mstunes': mstunes, 'f': f, 'request':request, 'ms': ms)

【问题讨论】:

in request.GET 是带有查询参数的网址。您可以从那里获取它们并将此值传递给模板。 request.GET.ms 的值为 8(见我的问题)。我想要一个标题。 在 ms 查询集上使用 filter 方法。 @hansTheFranz 请阅读我的问题并查看我的参数。 django-filter 产生一个 ms=id 参数。参数中没有“标题”。 @HBMCS hansTheFranz 已经为您提供了正确的输入。从 GET 参数中获取 ms 参数,例如 get_ms = request.GET.get("ms")。然后可以筛选出具体的稿件searched_ms = Manuscript.objects.get(id=get_ms)。最后,您可以将此对象传递给您的渲染方法中的模板,并在模板中显示标题,如 serached_ms.title 【参考方案1】:

这应该得到应该有标题的手稿对象:-

Manuscript.objects.get(id=ms)

注意 ms 是 get 参数中的 id(在您的示例中为 8)。

【讨论】:

当然可以。我怎样才能在模板上得到它? 在上下文中传递它。

以上是关于我可以在 Django 模板中获取特定对象的属性吗?的主要内容,如果未能解决你的问题,请参考以下文章

Django 模板:有没有办法根据其属性查询特定对象(而不是遍历所有对象)?

模板中的 Django 字典:从另一个对象属性中获取键

django 模板中的 for 循环 - 列表对象没有属性“get”

可以在 JS 脚本中使用 Django 模板标签吗

如何在模板标签中获取当前用户?

如何从 django 模板中的 for 循环中获取特定的 id?