在Django中,你可以通過多種方式向Django Admin添加自定義頁面。以下是一些常見的方法:
方法1:使用ModelAdmin的get_urls()方法
如果你只是想添加一個簡單的頁面來展示信息,你可以在你的ModelAdmin類中重寫get_urls()方法。
from django.urls import path
from django.utils.safestring import mark_safe
from django.contrib import admin
from .models import MyModelclass MyModelAdmin(admin.ModelAdmin):def get_urls(self):urls = super().get_urls()my_urls = [path('my-custom-view/', self.admin_site.admin_view(self.my_custom_view))]return my_urls + urlsdef my_custom_view(self, request):return mark_safe('<h1>這是一個自定義頁面</h1>')admin.site.register(MyModel, MyModelAdmin)
方法2:使用SimpleListFilter添加自定義鏈接
如果你想要在列表頁旁邊添加一些自定義鏈接,可以使用SimpleListFilter。
from django.contrib import admin
from django.utils.safestring import mark_safe
from .models import MyModelclass CustomLinkListFilter(admin.SimpleListFilter):title = 'custom links'template = 'admin/filter.html'def has_output(self):return Truedef choices(self, changelist):yield {'selected': changelist.get_query_string({}),'query_string': changelist.get_query_string({}),'display': '自定義鏈接'}def queryset(self, request, queryset):return querysetdef output(self, changelist):return mark_safe('<a href="/admin/myapp/mymodel/my-custom-view/">自定義頁面</a>')class MyModelAdmin(admin.ModelAdmin):list_filter = (CustomLinkListFilter,)admin.site.register(MyModel, MyModelAdmin)
方法3:使用admin_site.index和admin_site.app_index裝飾器添加頁面到主索引頁或應用索引頁
你可以通過重寫index和app_index視圖來添加自定義頁面。例如,如果你想在應用的主頁旁邊添加一個鏈接:
from django.contrib import admin
from django.urls import path, reverse, NoReverseMatch
from django.utils.safestring import mark_safe
from .models import MyModelclass MyModelAdmin(admin.ModelAdmin):pass # 實現你的自定義邏輯,例如列表展示或表單等。admin.site.register(MyModel, MyModelAdmin)@admin.register(MyModel) # 使用裝飾器注冊模型和它的管理員類(如果你的Django版本支持)
class MyModelAdmin(admin.ModelAdmin):pass # 實現你的自定義邏輯,例如列表展示或表單等。
然后,你可以通過修改urls.py來添加自定義視圖:
from django.urls import path, include, re_path
from django.contrib import admin
from .views import custom_view # 確保導入你的視圖函數或類視圖。urlpatterns = [path('admin/', admin.site.urls),path('admin/myapp/mymodel/my-custom-view/', custom_view, name='custom-view'), # 添加自定義URL路徑和視圖。
] + admin.site.urls # 注意這里的順序很重要,確保先包含你的自定義路徑再包含admin的默認路徑。
在views.py中定義你的視圖:
from django.shortcuts import render
from django.http import HttpResponse
from django.utils.safestring import mark_safe
from django.contrib.admin.views.decorators import staff_member_required # 如果需要限制訪問權限。
from django.contrib.auth.decorators import login_required # 如果需要登錄才能訪問。
from django.views.decorators.cache import never_cache # 防止緩存。
from django.views.decorators.csrf import csrf_protect # 保護CSRF。 如果你使用的是類視圖,可以在類中添加。 例如: @method_decorator([login_required, staff