當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。