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

git*_*t-e 4 python django customization django-admin

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

change_list.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 %}
Run Code Online (Sandbox Code Playgroud)

在admin.py中

class ImportAdmin(admin.ModelAdmin):
    change_list_template = 'admin/myapp/mymodel/change_list.html'
Run Code Online (Sandbox Code Playgroud)

但我看不到按钮.

t-p*_*yne 20

添加按钮的另一个选择是使用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', )
Run Code Online (Sandbox Code Playgroud)

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

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


Isa*_*hne 10

它的工作方式如下("导入"按钮右侧).

在此输入图像描述

Django = 1.11

admin/change_list.html:使用"admin:"添加网址.否则,它将无法解析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 %}
Run Code Online (Sandbox Code Playgroud)

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

class ImportAdmin(admin.ModelAdmin):
    change_list_template = 'admin/myapp/mymodel/change_list.html'
Run Code Online (Sandbox Code Playgroud)

settings.py:DDango> 1.8 TEMPLATE_LOADERS 已弃用.设置TEMPLATES如下.

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',
                ]),
            ],

        },
    },
]
Run Code Online (Sandbox Code Playgroud)

  • 对于 Django &gt;3,使用 `static` 而不是 `admin_static` (https://github.com/jazzband/django-constance/issues/366) (5认同)