将自定义按钮添加到 django 管理面板

新手上路,请多包涵

我想将按钮添加到管理面板到我的模型,我有覆盖模板(路径: templetes/admin/myapp/mymodel/change_list.html

更改列表.html

 {% extends "admin/change_list.html" %}
{% load i18n admin_static %}

{% block result_list %}
<div class="object-tools">
    <a href="{% url 'myurl' %}" class="btn btn-high btn-success">Import</a>
</div>
{{ block.super }}
{% endblock %}

在 admin.py 中

class ImportAdmin(admin.ModelAdmin):
    change_list_template = 'admin/myapp/mymodel/change_list.html'

但是我看不到按钮。

原文由 git-e 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 803
2 个回答

它的工作原理如下(“导入”按钮右侧)。

在此处输入图像描述

姜戈 = 1.11

admin/change_list.html:添加带有“admin:”的URL。否则,它不会解析 URL。

 {% extends "admin/change_list.html" %}
{% load i18n admin_static %}

{% block object-tools-items %}
{{ block.super }}
<li>
    <a href="{% url 'admin:myurl' %}" class="btn btn-high btn-success">Import</a>
</li>
{% endblock %}

admin.py:添加自定义模板 URL

 class ImportAdmin(admin.ModelAdmin):
    change_list_template = 'admin/myapp/mymodel/change_list.html'

姜戈 >1.8

settings.py:TEMPLATE_LOADERS 已弃用。如下设置模板。

 TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': False,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
            'loaders': [
                'admin_tools.template_loaders.Loader',
                ('django.template.loaders.cached.Loader', [
                    'django.template.loaders.filesystem.Loader',
                    'django.template.loaders.app_directories.Loader',
                ]),
            ],

        },
    },
]

原文由 Isanka Wijerathne 发布,翻译遵循 CC BY-SA 4.0 许可协议

添加按钮的另一种选择是使用 django-object-actions

首先,安装它: pip install django-object-actions 。 (如果您有需求文件,也请将 django-object-actions 添加到您的需求文件中)。

其次,将 django_object_actions 添加到您的 INSTALLED_APPS

然后,您可以在 admin.py 中使用它,如下所示:

 from django.contrib import admin
from django_object_actions import DjangoObjectActions

class ImportAdmin(DjangoObjectActions, admin.ModelAdmin):
    def imports(modeladmin, request, queryset):
        print("Imports button pushed")

    changelist_actions = ('imports', )

您现在应该在管理员中看到一个导入按钮,按下时,将调用 --- 中定义的 ImportAdmin imports 函数。

更多信息请参考: https ://github.com/crccheck/django-object-actions。

原文由 t-payne 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题