-
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_view
在ModelAdmin
實例中);像這樣使用它: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
屬性。 - 它將
本文介紹 django.contrib.admin.ModelAdmin.get_urls
的用法。
聲明
ModelAdmin.get_urls()
相關用法
- Python Django ModelAdmin.get_changeform_initial_data用法及代碼示例
- Python Django ModelAdmin.get_formset_kwargs用法及代碼示例
- Python Django ModelAdmin.get_form用法及代碼示例
- Python Django ModelAdmin.get_search_results用法及代碼示例
- Python Django ModelAdmin.get_formsets_with_inlines用法及代碼示例
- Python Django ModelAdmin.get_inline_instances用法及代碼示例
- Python Django ModelAdmin.get_changelist_formset用法及代碼示例
- Python Django ModelAdmin.get_sortable_by用法及代碼示例
- Python Django ModelAdmin.get_ordering用法及代碼示例
- Python Django ModelAdmin.get_changelist_form用法及代碼示例
- Python Django ModelAdmin.get_actions用法及代碼示例
- Python Django ModelAdmin.get_queryset用法及代碼示例
- Python Django ModelAdmin.formfield_for_choice_field用法及代碼示例
- Python Django ModelAdmin.readonly_fields用法及代碼示例
- Python Django ModelAdmin.prepopulated_fields用法及代碼示例
- Python Django ModelAdmin.empty_value_display用法及代碼示例
- Python Django ModelAdmin.formfield_for_foreignkey用法及代碼示例
- Python Django ModelAdmin.autocomplete_fields用法及代碼示例
- Python Django ModelAdmin.date_hierarchy用法及代碼示例
- Python Django ModelAdmin.save_model用法及代碼示例
- Python Django ModelAdmin.view_on_site用法及代碼示例
- Python Django ModelAdmin.formfield_overrides用法及代碼示例
- Python Django ModelAdmin.fields用法及代碼示例
- Python Django ModelAdmin.list_display用法及代碼示例
- Python Django ModelAdmin.list_display_links用法及代碼示例
注:本文由純淨天空篩選整理自djangoproject.com大神的英文原創作品 django.contrib.admin.ModelAdmin.get_urls。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。