【发布时间】:2014-03-12 21:19:20
【问题描述】:
有没有办法显示在 Django 管理中所做的每一个最后的操作?默认情况下,管理员仅显示当前用户的最后操作,但我想查看每个管理员的最后操作。由于我的项目中没有此页面的任何代码,我该如何与此小部件进行交互?我应该覆盖整个索引吗?
我想得到这样的东西:
如果我以er**** 连接(根据屏幕),而不仅仅是前两个条目。
【问题讨论】:
标签: django django-admin
有没有办法显示在 Django 管理中所做的每一个最后的操作?默认情况下,管理员仅显示当前用户的最后操作,但我想查看每个管理员的最后操作。由于我的项目中没有此页面的任何代码,我该如何与此小部件进行交互?我应该覆盖整个索引吗?
我想得到这样的东西:
如果我以er**** 连接(根据屏幕),而不仅仅是前两个条目。
【问题讨论】:
标签: django django-admin
是的,是的。 Django 管理中的所有内容都可以通过覆盖模板进行自定义。您只需要覆盖文件templates/admin/index.html of your current Django version 并更改此行:
{% get_admin_log 10 as admin_log for_user user %}
并删除for_user user 部分。它将显示最近的 10 个最近操作,而不按用户过滤。为了完美,您还需要更改块的名称并添加动作作者。侧边栏块应该是这样的:
{% block sidebar %}
<div id="content-related">
<div class="module" id="recent-actions-module">
<h2>{% trans 'Recent Actions' %}</h2>
<h3>{% trans 'Last Actions' %}</h3> {# Title modified #}
{% load log %}
{% get_admin_log 10 as admin_log %} {# No more filtering #}
{% if not admin_log %}
<p>{% trans 'None available' %}</p>
{% else %}
<ul class="actionlist">
{% for entry in admin_log %}
<li class="{% if entry.is_addition %}addlink{% endif %}{% if entry.is_change %}changelink{% endif %}{% if entry.is_deletion %}deletelink{% endif %}">
{% if entry.is_deletion or not entry.get_admin_url %}
{{ entry.object_repr }}
{% else %}
<a href="{{ entry.get_admin_url }}">{{ entry.object_repr }}</a>
{% endif %}
<br/>
{% if entry.content_type %}
{# Add the author here, at the end #}
<span class="mini quiet">{% filter capfirst %}{% trans entry.content_type.name %}{% endfilter %}, by {{ entry.user }}</span>
{% else %}
<span class="mini quiet">{% trans 'Unknown content' %}</span>
{% endif %}
</li>
{% endfor %}
</ul>
{% endif %}
</div>
</div>
{% endblock %}
【讨论】:
这在 django 1.9 上很容易覆盖:
在加载管理界面的主urls.py中(使用admin.autodiscover()),覆盖管理索引模板文件的名称:
from django.contrib import admin
admin.site.index_template = 'admin/my_custom_index.html'
admin.autodiscover()
然后在任何应用程序的模板目录中创建文件admin\my_custom_index.html(例如\my_app\templates\admin\my_custom_index.html)。它可以扩展现有的模板,所以不需要那么长:
{% extends "admin/index.html" %}
{% load i18n static %}
{% block sidebar %}
<div id="content-related">
<div class="module" id="recent-actions-module">
<h2>{% trans 'Recent actions' %}</h2>
<h3>{% trans 'All users' %}</h3>
{% load log %}
{% get_admin_log 30 as admin_log %}
{% if not admin_log %}
<p>{% trans 'None available' %}</p>
{% else %}
<ul class="actionlist">
{% for entry in admin_log %}
<li class="{% if entry.is_addition %}addlink{% endif %}{% if entry.is_change %}changelink{% endif %}{% if entry.is_deletion %}deletelink{% endif %}">
{% if entry.is_deletion or not entry.get_admin_url %}
{{ entry.object_repr }}
{% else %}
<a href="{{ entry.get_admin_url }}">{{ entry.object_repr }}</a>
{% endif %}
<br/>
{% if entry.content_type %}
<span class="mini quiet">{% filter capfirst %}{{ entry.content_type }}{% endfilter %}, by {{ entry.user }}</span>
{% else %}
<span class="mini quiet">{% trans 'Unknown content' %}</span>
{% endif %}
</li>
{% endfor %}
</ul>
{% endif %}
</div>
</div>
{% endblock %}
多年来,django 中的块发生了变化,这里的版本比 Maximime 的答案中的版本更新。
【讨论】: