django - 扩展 Django 管理模板 - 更改更改列表

标签 django django-admin

关于扩展 django 管理模板的一个(不是那么)快速的问题。

我试图通过在包含与该对象相关的一些对象的结果行(row1 和 row2 类)之间添加一个中间行来更改特定模型的结果列表(django lingo 中的更改列表)。

我搜索了代码,但没有找到一种方法来做到这一点。非常感谢任何指针。代码也会有所帮助。

PS:我知道我应该设计自己的界面,但这是一个内部项目,我没有那么多空闲时间。此外,django 界面非常好。

先感谢您。

最佳答案

为了扩展 Yuji 的答案,这里有一些关于覆盖 change_list_results.html 的细节...

覆盖 changelist_view如上面步骤 1 中所述,并且还描述了 here at djangoproject . 通过放置在上述步骤 2 中的相应目录中来自动覆盖。 (请注意,上面显示的第 2 步路径是特定于模型的。特定于应用程序的将是 /admin/<MyAppName>/change_list.html 在 TEMPLATE_DIRS 元组中定义的任何目录下。)

(也许更简单)只需指定 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 的目录),文件对应于上面的加载标签
# 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 }} )

关于django - 扩展 Django 管理模板 - 更改更改列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4794528/

相关文章:

python - Django:我必须在应用程序之前登录管理站点

Heroku 上的 Django

python - Django 通过外键查询

django - 如何让 django 执行远程 celery 任务?似乎忽略了 settings.py 中的 BROKER_URL

python - 缩略图现在显示在 django 管理 ListView 中

python - Django 预填充+附加固定字符串

python - 对于 Django Rest Framework,HyperLinkedRelatedField 和 HyperLinkedIdentityField 在用例上有什么区别?

python - 我怎样才能像这样对齐文本和图像?

python - 优化 Django 架构以加速管理中的 ListView

css - 带有 Apache2 的 Django 管理页面