2017-07-17 88 views
1

Django的行为与我所期望的一样,但给我一个警告。看来我的用例没有考虑到。这使我困惑,所以我的问题:我想念任何等待我的问题,或开发人员错过这个用例。django urlconf的奇怪警告

我希望url person/<slug>/指向一个详细信息视图,而url persons/指向列表视图。在详细视图中,它比起persons/来说更加人性化。我用包括使代码更简洁,是这样的:

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的告诉我,在开头的斜线是unneccesary - 这是不对的,留下它给我留下了逆转的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 '/'. 

回答

3

在你的情况,该警告是假阳性,但它是一个相当不寻常的使用情况,所以我不认为在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)开始的网址。然后,有人指出,在某些情况下,使用斜杠是有效的,因此当settings.APPEND_SLASH = Falseticket 27238)时警告被禁用。

如果您认为应该修改(甚至删除)该检查,那么django-developers邮件列表或票据跟踪器将是一个更好的地方来讨论这个问题,而不是Stack Overflow。

+0

感谢您的反馈@Alasdair。 只是为了正确性,它应该是'= False',对吧? 是的,django票务跟踪器可能是正确的地方,但对我来说这是不寻常的......我的意思是报告一个错误,我不确定它是否是一个。 是否有可能使特定警告消失?然后,我建议在警告中添加关于此的评论。 – Ilja

+0

您可以使用['SILENCED_SYSTEM_CHECKS'](https://docs.djangoproject.com/en/1.11/ref/settings/#silenced-system-checks)设置来消除检查。在你的情况下,我认为改变URL模式而不是沉默检查会更好。 – Alasdair

+0

我不认为沉默斜杠检查是一个很好的解决方案 - 除非有可能在该行中沉默这个_this specific_警告 - 似乎并非如此。作为开发人员为此提供功能请求可能不值得。我不会成功写一篇我害怕的:)那么,我会结束这个问题,再次感谢你。 – Ilja