urlconf 的 django 奇怪警告

django strange warning for urlconf

Django 的行为正如我所希望和预期的那样,但给了我一个警告。似乎没有考虑我的用例。这让我感到困惑,所以我的问题是:我是否错过了等待我的任何问题,或者开发人员是否错过了这个用例。

我希望 url person/<slug>/ 指向详细视图,url persons/ 指向列表视图。它也比在详细视图中以 persons/ 开头更易于阅读。我使用 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 告诉我,开头的斜线是不必要的 - 这是错误的,将其排除在外会使我得到反转的 urls 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). Then, it was pointed out that there were some cases where it is valid to use a slash, so the warning was disabled when settings.APPEND_SLASH = False (ticket 27238) 开头的 URL。

如果您认为应该修改(甚至删除)检查,那么 django-developers 邮件列表或票证跟踪器将是比 Stack Overflow 更好的讨论场所。