跳转到主要内容

Django混入,轻松将url添加到任何ModelAdmin

项目描述

https://raw.githubusercontent.com/saxix/django-admin-extra-urls/develop/docs/image.png

可插入的django应用程序,提供单个混入类ExtraUrlMixin,轻松将新url(及相关屏幕按钮)添加到任何ModelAdmin。

  • url()装饰器将为ModelAdmin创建新的视图。

  • button()url(button={...})的快捷方式。

  • link()用于添加指向外部url的按钮。

安装

pip install django-admin-extra-urls

安装后将其添加到INSTALLED_APPS

INSTALLED_APPS = (
    ...
    'admin_extra_urls',
)

如何使用它

from admin_extra_urls.api import url, button, link, href

class MyModelModelAdmin(extras.ExtraUrlMixin, admin.ModelAdmin):

    @link(label='Search On Google', 'http://www.google.com?q={target}') # /admin/myapp/mymodel/update_all/
    def search_on_google(self, button):
        # this is called by the template engine just before rendering the button
        # `context` is the Context instance in the template
        if 'original' in button.context:
            obj = button.context['original']
            return {'target': obj.name}
        else:
            button.visible = False

    @link()
    def search_on_bing(self, button):
        return 'http://www.bing.com?q=target'


    @button() # /admin/myapp/mymodel/update_all/
    def consolidate(self, request):
        ...
        ...

    @button() # /admin/myapp/mymodel/update/10/
    def update(self, request, pk):
        # if we use `pk` in the args, the button will be in change_form
        obj = self.get_object(request, pk)
        ...

    @button(urls=[r'^aaa/(?P<pk>.*)/(?P<state>.*)/$',
                  r'^bbb/(?P<pk>.*)/$'])
    def revert(self, request, pk, state=None):
        obj = self.get_object(request, pk)
        ...


    @button(label='Truncate', permission=lambda request, obj: request.user.is_superuser)
    def truncate(self, request):

        if request.method == 'POST':
            self.model.objects._truncate()
        else:
            return extras._confirm_action(self, request, self.truncate,
                                   'Continuing will erase the entire content of the table.',
                                   'Successfully executed', )

如果用button装饰的方法的返回值是HttpResponse,则将使用该返回值。否则,如果方法包含pk参数,则用户将被重定向到“更新”视图,否则浏览器将重定向到管理员的列表视图

button()选项

这些是button()接受的参数

path

None

path按钮的URL路径。将是按钮指向的URL。

label

None

按钮标签。默认为“labelized”函数名称。

图标

''

按钮的图标。

权限

None

使用按钮所需的权限。可以是可调用的(当前对象作为参数)。

css_class

“btn btn-success”

用于按钮的额外CSS类

order

999

在多个按钮的情况下使用顺序

visible

lambda o: o and o.pk

可调用或布尔值。默认情况下,在“添加”模式下不显示“操作”按钮

urls

None

要链接到操作的URL列表。

与其他库的集成

django-import-export

@admin.register(Rule)
class RuleAdmin(ExtraUrlMixin, ImportExportMixin, BaseModelAdmin):
    @button(label='Export')
    def _export(self, request):
        if '_changelist_filters' in request.GET:
            real_query = QueryDict(request.GET.get('_changelist_filters'))
            request.GET = real_query
        return self.export_action(request)

    @button(label='Import')
    def _import(self, request):
        return self.import_action(request)

在本地运行项目测试

使用 pip install -e '.[dev]' 安装开发依赖项,然后运行tox。

项目详情


下载文件

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

源分布

django-admin-extra-urls-4.1.1.tar.gz (108.6 kB 查看散列)

上传时间

由以下支持