Ответ 1
Чтобы расширить ответ на Yuji, вот некоторые особенности при переопределении change_list_results.html
...
Переопределите changelist_view
, как описано выше на шаге 1, а также описано здесь, в djangoproject. или, поместив в соответствующий каталог, как на шаге 2 выше. (Обратите внимание, что приведенный выше путь к шагу 2 специфичен для конкретной модели. Спецификация приложения будет /admin/<MyAppName>/change_list.html
в любом каталоге, определенном в корте TEMPLATE_DIRS.)
Или (возможно, проще) просто укажите ModelAdmin.change_list_template
, как описано здесь с любым открываемым именем файла шаблона. (Хотя, если вы сохраните имя 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
), с файлом, соответствующим тегу загрузки выше
# 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>
, который не был отсортирован в списке результатов.)
ДОПОЛНИТЕЛЬНОЕ
Чтобы включить дополнительный контекст, измените модуль templatetags следующим образом:
# 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 }}
)