0

我正在编写我的第一个Django项目Django 2.0

我注意到另一个奇怪的行为Django urlpatterns

我在starrednotes其中有一个应用程序和模型Starred(models.Model)

Shared(models.Model)sharednotes应用程序内也是如此

我已经使用urlpattern与模型名称相同的路径模式配置了 for

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

但是当我从adminURL访问这两个模型时

http://example.com/admin/sharednotes/shared
http://example.com/admin/starrednotes/starred

这两个链接正在加载StarredNotesSharedNotes类中的模板设置,而不是管理模板。

4

1 回答 1

0

我不明白为什么它会这样。它是 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
于 2017-12-22T04:03:02.753 回答