-
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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。