跳转到主要内容

Django混合函数,用于轻松向任何ModelAdmin添加按钮

项目描述

django-admin-extra-buttons

Pypi coverage Test Docs

my image

这是对原始django-admin-extra-url的全面重写。它提供装饰器,以便轻松向Django Admin页面添加自定义按钮,以及向任何ModelAdmin添加视图。

它允许轻松创建向导、操作以及/或指向外部资源的链接以及仅API视图。

有三个装饰器可用

  • button() 将方法标记为额外视图并显示相关按钮
  • link() 这用于“外部”链接,在这种情况下,您不需要调用本地视图。
  • view() 仅视图装饰器,这添加了一个新的URL,但不渲染任何按钮。
  • choice() 类似于菜单的按钮,可以用于分组多个 @views()。

安装

pip install django-admin-extra-buttons

安装后,将其添加到 INSTALLED_APPS

INSTALLED_APPS = (
   ...
   'admin_extra_buttons',
)

如何使用它

from admin_extra_buttons.api import ExtraButtonsMixin, button, confirm_action, link, view
from admin_extra_buttons.utils import HttpResponseRedirectToReferrer
from django.http import HttpResponse, JsonResponse
from django.contrib import admin
from django.views.decorators.clickjacking import xframe_options_sameorigin
from django.views.decorators.csrf import csrf_exempt


class MyModelModelAdmin(ExtraButtonsMixin, admin.ModelAdmin):

    @button(permission='demo.add_demomodel1',
            visible=lambda self: self.context["request"].user.is_superuser,
            change_form=True,
            html_attrs={'style': 'background-color:#88FF88;color:black'})
    def refresh(self, request):
        self.message_user(request, 'refresh called')
        # Optional: returns HttpResponse
        return HttpResponseRedirectToReferrer(request)

    @button(html_attrs={'style': 'background-color:#DC6C6C;color:black'})
    def confirm(self, request):
        def _action(request):
            pass

        return confirm_action(self, request, _action, "Confirm action",
                              "Successfully executed", )

    @link(href=None,
          change_list=False,
          html_attrs={'target': '_new', 'style': 'background-color:var(--button-bg)'})
    def search_on_google(self, button):
        original = button.context['original']
        button.label = f"Search '{original.name}' on Google"
        button.href = f"https://www.google.com/?q={original.name}"

    @view()
    def select2_autocomplete(self, request):
        return JsonResponse({})

    @view(http_basic_auth=True)
    def api4(self, request):
        return HttpResponse("Basic Authentication allowed")

    @view(decorators=[csrf_exempt, xframe_options_sameorigin])
    def preview(self, request):
        if request.method == "POST":
            return HttpResponse("POST")
        return HttpResponse("GET")

项目链接

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源代码分布

django_admin_extra_buttons-1.5.8.tar.gz (995.6 kB 查看哈希值)

上传时间 源代码

支持