为了自定义默认的管理站点,我进行了以下更改:
admin.py:
class CustomAdminSite(admin.AdminSite):
def get_urls(self):
urls = super(CustomAdminSite, self).get_urls()
custom_urls = [
# re_path(r'^.*\.html', views.custom_admin_template_loader, name='custom-loader'),
url(r'^.*\.html', self.admin_view(self.my_view), name="my-view"),
]
return urls + custom_urls
def my_view(self, request):
context = {}
load_template = request.path.split('/')[-1]
template = loader.get_template('admin/' + load_template)
request.current_app = self.name
return HttpResponse(template.render(context, request))
apps.py:
from django.contrib.admin.apps import AdminConfig
class MyAdminConfig(AdminConfig):
default_site = 'myproject.admin.CustomAdminSite'
settings.py:
INSTALLED_APPS = [
'myproject.apps.MyAdminConfig',
urls.py中的任何内容
因此,如果我访问admin /可以工作,但是如果我使用自己创建的视图访问另一个模板,它会说您无权编辑任何内容,如何解决该问题? 为了澄清使用该视图的原因,这是因为我覆盖了默认的管理模板,并且现在有了导航栏,这意味着我需要浏览不同的html文件(模板)
答案 0 :(得分:0)
解决方案:经过django.contrib.admin中的整个代码后,我发现了(由于不再使用谷歌搜索和文档记录,这使我花费了令人难以置信的小时数)。
我需要传递上下文+设置request.current_app,我仍然不确定它的工作方式NOR为什么我必须这样做,因为有关此问题的文档很糟糕。无论如何,以下是我为其添加的代码:(在我的自定义视图中添加)
File "main.py", line 6, in test_init
client = Dog(f)
TypeError: __init__(): incompatible constructor arguments. The following argument types are supported:
1. pywrapper.Dog(arg0: _IO_FILE)
Invoked with: <_io.TextIOWrapper name='test.log' mode='w' encoding='UTF-8'>