为了扩展 Yuji 的答案,这里有一些关于覆盖 change_list_results.html 的细节......
覆盖changelist_view,如上文第 1 步所述,也描述了here at djangoproject。 或通过放置在上述步骤 2 中的相应目录中来自动覆盖。 (请注意,上面显示的第 2 步路径是特定于模型的。特定于应用程序的将是 TEMPLATE_DIRS 元组中定义的任何目录下的/admin/<MyAppName>/change_list.html。)
或者(也许更简单)只需指定ModelAdmin.change_list_template 解释here 与任何可发现的模板文件名。 (不过,如果你保留change_list.html这个名字,一定不要直接存入/admin文件夹,否则extends标签会导致递归。)
class MyModelAdmin(admin.ModelAdmin):
change_list_template = 'change_list.html' # definitely not 'admin/change_list.html'
# ...
在您的change_list.html 模板中,至少有
{% extends "admin/change_list.html" %}
{% load i18n admin_static admin_list %}
{% load myapptags %}
{% block result_list %}
{% if action_form and actions_on_top and cl.full_result_count %}{% admin_actions %}{% endif %}
{% result_list cl %}
{% if action_form and actions_on_bottom and cl.full_result_count %}{% admin_actions %}{% endif %}
{% endblock %}
创建一个/<MyAppName>/templatetags包(包含__init__.py的目录),文件对应上面的load标签
# MyAppName/templatetags/myapptags.py
from django import template
from django.contrib.admin.templatetags.admin_list import result_list
register = template.Library()
register.inclusion_tag('my_change_list_results.html')(result_list)
复制和编辑 Django 的 change_list_results.html(例如上面的 my_change_list_results.html)以使用您添加的功能。
请注意,这些步骤不包括模板的额外上下文,但可以轻松扩展。 (我这样做的原因是为 CSS 添加类和一个未与结果列表排序的前导 <tbody>。)
附加:
要包含额外的上下文,请按如下方式更改您的模板标签模块:
# MyAppName/templatetags/myapptags.py
from django import template
from django.contrib.admin.templatetags.admin_list import result_list as admin_list_result_list
def result_list(cl):
mycl = {'myextracontext': 'something extra'}
mycl.update(foo_extra())
mycl.update(admin_list_result_list(cl))
return mycl
register = template.Library()
register.inclusion_tag('my_change_list_results.html')(result_list)
然后,myextracontext 的值或foo_extra 返回的任何值都可以包含在您的结果模板中(例如{{ myextracontext }})