如何在django admin change_list模板中获取该对象

use*_*401 3 python django

我想覆盖django admin change_list页面,但我无法找到如何获取实际对象,以便我可以访问像 object.name

在模板中,他们有这个代码

<tr >{% for item in result %}{{ item }}{% endfor %}</tr>

我可以使用的实际对象在哪里

编辑:

看起来就像result行和项目是列.我想要类似的东西result.pk

如果结果,这将产生列表

https://github.com/django/django/blob/master/django/contrib/admin/templatetags/admin_list.py#L175

Aus*_*ips 14

馈送的上下文change_list.html包括cl对应于contrib.admin.views.main.ChangeList对象的条目,该对象是包含结果列表的对象.

您可以像这样直接访问结果列表:

{% for object in cl.result_list %}
{{ object.field }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

change_list_results.html通过使用result_list模板标记,更改列表结果将呈现为模板的一部分.在渲染模板时,change_list_results.html模板还具有cl上下文变量.

当Django模板result在您的示例中迭代时,result是一个ResultList包含预渲染html的对象,正在渲染的基础对象不可用.

要覆盖此级别的模板,您可能需要实现自己的result_list类型模板标记,该标记可以返回结果列表,其中基础对象作为属性附加到每个结果.

简而言之,您可能需要:

  • result_list根据Django的实现创建自己的模板标记.让它返回一个results上下文作为ResultListresults呈现的html 列表,让它返回包含能够呈现为html的对象,以及附加原始底层对象的每个项目,以便以后在模板中使用.
  • 覆盖change_list.html模板以使用新标记而不是Django的result_list模板标记.
  • 覆盖change_list_results.html模板以利用模板标记中可用的额外信息,例如每个底层对象的存在.

正如您可能已经收集的那样,管理员应用程序通过各层紧密集成.更改其操作非常重要,需要更改和覆盖源的多个部分.