当url模式与模型名称相同时,Django管理员加载视图模板
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当url模式与模型名称相同时,Django管理员加载视图模板相关的知识,希望对你有一定的参考价值。
我正在Django
写我的第一个Django 2.0
项目。
我注意到Django
urlpatterns
的另一种奇怪的行为。
我有一个应用程序starrednotes
和其中的模型作为Starred(models.Model)
Shared(models.Model)
应用程序中sharednotes
的情况也是如此
我已经使用与模型名称相同的路径模式配置了urlpattern
urlpatterns = [
url(r'^starred/$', StarredNotes.as_view(), name='starred'),
url(r'^shared/$', SharedNotes.as_view(), name='shared'),
]
并查看StarredNotes
是
class StarredNotes(ListView):
template_name = 'notes/starred.html'
model = Starred
context_object_name = 'starred_notes'
def get_queryset(self):
starred_notes = Starred.objects.filter(user=self.request.user)
return starred_notes
@method_decorator(login_required)
def dispatch(self, request, *args, **kwargs):
return super(self.__class__, self).dispatch(request, *args, **kwargs)
上面的URL设置可以使用
http://example.com/notes/shared
http://example.com/notes/starred
但当我从admin
访问这两个模型时,URL为
http://example.com/admin/sharednotes/shared
http://example.com/admin/starrednotes/starred
这两个链接正在加载StarredNotes
和SharedNotes
类中的模板设置而不是管理模板。
答案
我无法理解为什么它会像这样。它是Django中的Django限制还是错误。
无论如何,这里有两种方法可以摆脱它。
1.改变urlpattern
更改URL模式并将模式替换为模型名称以外的其他模式。就我而言,这就是我的urlpatterns现在的样子。
urlpatterns = [
url(r'^starred/$', StarredNotes.as_view(), name='starred'),
url(r'^shared/$', SharedNotes.as_view(), name='shared'),
]
2.更改型号名称
这不是推荐的方法,但只有当urlpattern比模型更重要时,才能将模型重命名为其他模式。更改型号名称可能还需要更改许多其他位置。
class SharedNote(models.Model):
# model fields
class StarredNote(models.Model):
# model fields
以上是关于当url模式与模型名称相同时,Django管理员加载视图模板的主要内容,如果未能解决你的问题,请参考以下文章