当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python Django ModelAdmin.get_urls用法及代码示例


本文介绍 django.contrib.admin.ModelAdmin.get_urls 的用法。

声明

ModelAdmin.get_urls()

ModelAdmin 上的 get_urls 方法以与 URLconf 相同的方式返回要用于该 ModelAdmin 的 URL。因此,您可以按照 URL 调度程序中的说明扩展它们:

from django.contrib import admin
from django.template.response import TemplateResponse
from django.urls import path

class MyModelAdmin(admin.ModelAdmin):
    def get_urls(self):
        urls = super().get_urls()
        my_urls = [
            path('my_view/', self.my_view),
        ]
        return my_urls + urls

    def my_view(self, request):
        # ...
        context = dict(
           # Include common variables for rendering the admin template.
           self.admin_site.each_context(request),
           # Anything else you want in the context...
           key=value,
        )
        return TemplateResponse(request, "sometemplate.html", context)

如果要使用管理布局,请从 admin/base_site.html 扩展:

{% extends "admin/base_site.html" %}
{% block content %}
...
{% endblock %}

注意

请注意,自定义模式包含在常规管理 URL before 中:管理 URL 模式非常宽松,几乎可以匹配任何内容,因此您通常需要将自定义 URL 预先添加到内置 URL。

在此示例中,my_view 将在 /admin/myapp/mymodel/my_view/ 访问(假设管理 URL 包含在 /admin/ 中。)

但是,上面注册的self.my_view函数存在两个问题:

  • 它将 not 执行任何权限检查,因此公众可以访问它。
  • 它将 not 提供任何标头详细信息以防止缓存。这意味着如果页面从数据库中检索数据,并且缓存中间件处于活动状态,则页面可能会显示过时的信息。

由于这通常不是您想要的,Django 提供了一个方便的包装器来检查权限并将视图标记为不可缓存。这个包装是AdminSite.admin_view()(即self.admin_site.admin_viewModelAdmin实例中);像这样使用它:

class MyModelAdmin(admin.ModelAdmin):
    def get_urls(self):
        urls = super().get_urls()
        my_urls = [
            path('my_view/', self.admin_site.admin_view(self.my_view))
        ]
        return my_urls + urls

注意上面第五行中的包装视图:

path('my_view/', self.admin_site.admin_view(self.my_view))

此包装将保护 self.my_view 免受未经授权的访问,并将应用 django.views.decorators.cache.never_cache() 装饰器以确保如果缓存中间件处于活动状态,它不会被缓存。

如果页面是可缓存的,但您仍希望执行权限检查,则可以将 cacheable=True 参数传递给 AdminSite.admin_view()

path('my_view/', self.admin_site.admin_view(self.my_view, cacheable=True))

ModelAdmin 视图具有 model_admin 属性。其他 AdminSite 视图具有 admin_site 属性。

相关用法


注:本文由纯净天空筛选整理自djangoproject.com大神的英文原创作品 django.contrib.admin.ModelAdmin.get_urls。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。