Django 的行为符合我的希望和预期,但给了我一个警告。看来我的用例没有被考虑到。这让我很困惑,所以我的问题是:我是否错过了等待我的任何问题,或者开发人员是否错过了这个用例。
我想要网址person/<slug>/
指向详细 View ,URL persons/
指向 ListView 。它比以 persons/
开头更适合人类阅读。也在详细 View 中。我使用 include 来使代码更简洁,例如:
url(r'^person', include([
url(r'^s/$', views.foo),
url(r'^/(?P<slug>[\w-]+)/form/$', views.form),
url(r'^/(?P<slug>[\w-]+)/$', views.bar),
])),
现在 Django 告诉我,开头的斜杠是不必要的 - 这是错误的,省略它会让我得到反向的 url person<slug>
之间没有斜杠。我不明白为什么这应该是糟糕的风格。警告是:
WARNINGS:
?: (urls.W002) Your URL pattern '^/(?P<slug>[\w-]+)/form/$'
[name='person_form'] has a regex beginning with a '/'. Remove this
slash as it is unnecessary. If this pattern is targeted in an
include(), ensure the include() pattern has a trailing '/'.
最佳答案
就您而言,警告是误报,但这是一个相当不寻常的用例,因此我认为 Django 中的启发式不一定需要更改。
您可以通过将 URL 模式更改为以下方式来防止出现警告:
url(r'^persons/$', views.foo),
url(r'^person/', include([
url(r'^(?P<slug>[\w-]+)/form/$', views.form),
url(r'^(?P<slug>[\w-]+)/$', views.bar),
])),
起初,警告针对的是任何以 /
( ticket 23813 ) 开头的 URL。然后,有人指出,在某些情况下使用斜杠是有效的,因此当 settings.APPEND_SLASH = False
( ticket 27238 ) 时,警告被禁用。
如果您认为应该修改(甚至删除)该检查,那么 django-developers 邮件列表或票务跟踪器将是比 Stack Overflow 更好的讨论此问题的地方。
关于python - django urlconf 的奇怪警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45144201/