django admin,使用自定义视图扩展admin [英] django admin, extending admin with custom views
问题描述
我想在这件事上寻求帮助。
我关注了此指南可向我的管理员添加视图。
我使用的是网站使用的相同代码,但出现错误:
带有参数'的'app_list'的反向()和关键字参数'{'app_label':'reports'}'未找到。
admin / my_view
可以正常工作,但是如果我尝试访问管理员的其他页面(例如索引页面),则会收到错误消息
这是代码:
#someapp / admin.py
来自django.conf.urls导入模式
从django.contrib导入管理员
从django.http导入HttpResponse
def my_view(request):
return HttpResponse( Hello!)
def get_admin_urls(urls):
def get_urls():
my_urls =模式('',
(r'^ my_view / $',admin.site.admin_view(my_view))
)
返回my_urls + urls
return get_urls
admin_urls = get_admin_urls(admin.site.get_urls())
admin.site.get_urls = admin_urls
我正在使用django 1.8.2,python 2.7
还有,在管理员的索引页面中添加某些视图或上下文的最佳方法是什么? / p>
更新
我尝试了Antoine Pinsard的回答并尝试了以下方法:
#admin.py
来自django.contrib.admin import AdminSite
class MyAdminSite(AdminSite):
def get_urls(self):django.conf.urls中的
导入url
urls = super(MyAdminSite,self).get_urls()
urls == [
url(r'^ my_view / $',self.admin_view(self.my_view))
]
返回URL
def my_view(self,request):
返回HttpResponse( Hello !)
admin_site = MyAdminSite()
并替换urls.py url(r'^ admin /',include(admin.site.urls)),
到 url(r'^ admin /',include( admin_site.urls)),
并获取:
带有参数'()'和关键字参数的'app_list'反向
回溯:
请求方法:GET
请求URL:http:// localhost:8000 / @ dmin /
Django版本:1.8.2
Python版本:2.7.10
已安装的应用程序:
('grappelli',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.sessions.models',
'frontend',
'file_maintenance',
'reports',
'transactions',
'admin_reorder ',
'admin_notifications',
'django_twilio',
'daterange_filter')
已安装的中间件:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.models.User',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'admin_reorder.middleware.ModelAdminReorder ')
追溯:
文件 C:\Python27\lib\site-packages\django\core\handlers\base.py在get_response
157中。response = middleware_method(request,response)
process_template_response
中的文件 C:\Python27\lib\site-packages\admin_reorder\middleware.py 134. self.init_config(request,app_list)
文件 C:\Python27\lib\site-packa init_config
21.中的ges\admin_reorder\middleware.py。admin_index = admin.site.index(request)
文件 C:\Python27\lib\site-packages\django _wrapped_view_func
57中的 viewsdecorators\cache.py。response = view_func(request,* args,** kwargs)
文件 C:\Python27\lib\site -packages\django\contrib\admin\sites.py,位于索引
438中。current_app = self.name,
文件 C:\Python27\lib\site\packages jandjango\core\urlresolvers.py反过来
579。return force_text(iri_to_uri(resolver._reverse_with_prefix(view,prefix,* args,** kwargs)))
文件 C: _reverse_with_prefix
496中的 Python27库站点包 django核心 urlresolvers.py。(lookup_view_s,args,kwargs,len(模式),模式))
异常类型:NoReverseMatch at / @ dmin /
异常值:带有参数'()'和关键字参数'{'app_label':'django_twilio'}'n的'app_list'的反向找不到。尝试了0个模式:[]
本指南看起来很老我建议您遵循 django docs 。
someapp / admin.py
<从django.contrib.admin中导入pre>
从django中导入AdminSite
.http导入HttpResponse
class MyAdminSite(AdminSite):
def get_urls(self):来自django.urls的
导入路径
urls = super()。get_urls()
urls + = [
path('my_view /',self .admin_view(self.my_view))
]
返回网址
def my_view(自身,请求):
return HttpResponse( Hello!)
admin_site = MyAdminSite()
来源: https://github.com/django/django/blob/2.2/django/ contrib / admin / sites.py#L194-L205
您还应该更新您的 project / urls.py
并替换 path('admin /',admin.site.urls)
通过 path('admin /',admin_site.urls)
。不要忘记之前从someapp.admin导入admin_site 。
I would like to request some assistance regarding this matter.
I have followed this guide to add a view to my admin.
I am using the same code that the site has and I'm getting an error:
Reverse for 'app_list' with arguments '()' and keyword arguments '{'app_label': 'reports'}' not found.
The admin/my_view
works fine but if I try to access the other pages in the admin such as the index page I am getting the error
Here's the code:
#someapp/admin.py
from django.conf.urls import patterns
from django.contrib import admin
from django.http import HttpResponse
def my_view(request):
return HttpResponse("Hello!")
def get_admin_urls(urls):
def get_urls():
my_urls = patterns('',
(r'^my_view/$', admin.site.admin_view(my_view))
)
return my_urls + urls
return get_urls
admin_urls = get_admin_urls(admin.site.get_urls())
admin.site.get_urls = admin_urls
I am using django 1.8.2, python 2.7
also, what is the best way to add some view or context in the admin's index page?
UPDATE
I have tried Antoine Pinsard's answer and tried this:
#admin.py
from django.contrib.admin import AdminSite
class MyAdminSite(AdminSite):
def get_urls(self):
from django.conf.urls import url
urls = super(MyAdminSite, self).get_urls()
urls += [
url(r'^my_view/$', self.admin_view(self.my_view))
]
return urls
def my_view(self, request):
return HttpResponse("Hello!")
admin_site = MyAdminSite()
And replacing urls.py's url(r'^admin/', include(admin.site.urls)),
to url(r'^admin/', include(admin_site.urls)),
and getting:
Reverse for 'app_list' with arguments '()' and keyword arguments
TRACEBACK:
Request Method: GET
Request URL: http://localhost:8000/@dmin/
Django Version: 1.8.2
Python Version: 2.7.10
Installed Applications:
('grappelli',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.sessions.models',
'frontend',
'file_maintenance',
'reports',
'transactions',
'admin_reorder',
'admin_notifications',
'django_twilio',
'daterange_filter')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.models.User',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'admin_reorder.middleware.ModelAdminReorder')
Traceback:
File "C:\Python27\lib\site-packages\django\core\handlers\base.py" in get_response
157. response = middleware_method(request, response)
File "C:\Python27\lib\site-packages\admin_reorder\middleware.py" in process_template_response
134. self.init_config(request, app_list)
File "C:\Python27\lib\site-packages\admin_reorder\middleware.py" in init_config
21. admin_index = admin.site.index(request)
File "C:\Python27\lib\site-packages\django\views\decorators\cache.py" in _wrapped_view_func
57. response = view_func(request, *args, **kwargs)
File "C:\Python27\lib\site-packages\django\contrib\admin\sites.py" in index
438. current_app=self.name,
File "C:\Python27\lib\site-packages\django\core\urlresolvers.py" in reverse
579. return force_text(iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs)))
File "C:\Python27\lib\site-packages\django\core\urlresolvers.py" in _reverse_with_prefix
496. (lookup_view_s, args, kwargs, len(patterns), patterns))
Exception Type: NoReverseMatch at /@dmin/
Exception Value: Reverse for 'app_list' with arguments '()' and keyword arguments '{'app_label': 'django_twilio'}' not found. 0 pattern(s) tried: []
This guide looks quite old. I would rather advise you to follow django docs.
someapp/admin.py
from django.contrib.admin import AdminSite
from django.http import HttpResponse
class MyAdminSite(AdminSite):
def get_urls(self):
from django.urls import path
urls = super().get_urls()
urls += [
path('my_view/', self.admin_view(self.my_view))
]
return urls
def my_view(self, request):
return HttpResponse("Hello!")
admin_site = MyAdminSite()
Source: https://github.com/django/django/blob/2.2/django/contrib/admin/sites.py#L194-L205
You should also update your project/urls.py
and replace path('admin/', admin.site.urls)
by path('admin/', admin_site.urls)
. Don't forget to from someapp.admin import admin_site
before.
这篇关于django admin,使用自定义视图扩展admin的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!