Django自定义AdminSite如何在TemplateView模板中添加访问链接?
问题描述
在Django 5.0.2中已定义自定义AdminSite并关联部分应用,自定义后台可通过http://127.0.0.1:8080/my-admin/正常访问。但在TemplateView对应的模板main.html中,无法正确添加指向该自定义后台的链接(对应代码中????????位置),标准admin页面的链接可正常使用。
相关代码
mydjango/myadmin/admin.py
from django.contrib.admin import AdminSite class EventAdminSite(AdminSite): site_header = 'Test ADMIN' site_titile = 'Test ADMIN PORTAL' # 注意:此处拼写错误,应为site_title index_title = 'WELCOME TO MY ADMIN PORTAL' my_admin_site = EventAdminSite(name = 'my_admin')
mydjango/applications/admin.py
from django.contrib import admin from .models import Application from myadmin.admin import my_admin_site class ApplicationAdmin(admin.ModelAdmin): search_fields = ["name", "dest1_protocol","dest1_port"] exclude = ["created","modified"] admin.site.register(Application) my_admin_site.register(Application,ApplicationAdmin)
mydjango/mysettings.py
urlpatterns = [ .. path("my-admin/",my_admin_site.urls), .. ]
mydjango/main/views.py
from django.shortcuts import render from django.views.generic.base import TemplateView class IndexView(TemplateView): template_name = 'main/index.html' def get_context_data(self, *args, **kwargs): context = super().get_context_data(*args, **kwargs) context['title'] = "Policy-Management" return context
mydjango/main/templates/main.html
{% load admin_urls %} <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>{{ title }}</title> </head> <body> {{ title }} <a href="{% url 'admin:index' %}">link to admin panel</a> <a href="{% url '???????????????????????' %}">link to my admin panel</a> </body> </html>
解决方案
自定义AdminSite的URL命名空间由创建实例时传入的name参数决定。你创建my_admin_site时指定了name='my_admin',因此它的首页URL名称为my_admin:index,直接替换模板中的占位符即可:
修改main.html中的链接代码:
<a href="{% url 'my_admin:index' %}">link to my admin panel</a>
另外注意:你的EventAdminSite类中site_titile存在拼写错误,正确应为site_title,修正后才能正常显示后台页面的标题。
内容的提问来源于stack exchange,提问作者MatrixClient
相关产品推荐
相关产品推荐

