当我们可以通过在 views.py 中添加视图和在 urls.py 中添加 url 来正常执行时,是否需要在 ModelAdmin class 的管理页面中添加自定义视图?
Is it required to add custom views in admin page in ModelAdmin class when we can do it normally by adding views in views.py and urls in urls.py?
根据 django 文档:
class MyModelAdmin(admin.ModelAdmin):
def get_urls(self):
urls = super(MyModelAdmin, self).get_urls()
my_urls = [
url(r'^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)
如果我没记错的话,我们可以通过在urls.py中添加url和在views.py中添加视图来做同样的事情,就像通常所做的那样,有什么用以这种方式介绍?我是 django 的新手,我可能在这里遗漏了一些东西。
能否请您举个例子,在views.py中我们做不到,必须用上面的方法?
任何 guidance/help 将不胜感激。
我想我明白了,它们都可以用来做同样的事情,但主要区别在于您使用上述方法编写的视图将属于 admin app 而 views.py 中的一般视图属于您编写的特定应用程序。
因此,需要使用名称 admin:url_name 调用 ModelAdmin 中的 url,因为 url 变为 admin/my_views/ 在给定的例子中。
根据 django 文档:
class MyModelAdmin(admin.ModelAdmin):
def get_urls(self):
urls = super(MyModelAdmin, self).get_urls()
my_urls = [
url(r'^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)
如果我没记错的话,我们可以通过在urls.py中添加url和在views.py中添加视图来做同样的事情,就像通常所做的那样,有什么用以这种方式介绍?我是 django 的新手,我可能在这里遗漏了一些东西。 能否请您举个例子,在views.py中我们做不到,必须用上面的方法? 任何 guidance/help 将不胜感激。
我想我明白了,它们都可以用来做同样的事情,但主要区别在于您使用上述方法编写的视图将属于 admin app 而 views.py 中的一般视图属于您编写的特定应用程序。 因此,需要使用名称 admin:url_name 调用 ModelAdmin 中的 url,因为 url 变为 admin/my_views/ 在给定的例子中。