【问题标题】:django strange warning for urlconfdjango 对 urlconf 的奇怪警告
【发布时间】:2017-07-17 12:21:40
【问题描述】:

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 告诉我,开头的斜杠是不必要的 - 这是错误的,将其省略会让我得到反向的 url person&lt;slug&gt; 中间没有斜杠。我不明白为什么这应该是不好的风格。警告是:

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 '/'.

【问题讨论】:

    标签: python django coding-style url-routing


    【解决方案1】:

    在您的情况下,警告是误报,但这是一个相当不寻常的用例,所以我认为不必更改 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 = Falseticket 27238)时,警告被禁用。

    如果您认为应该修改(甚至删除)支票,那么 django-developers 邮件列表或票务跟踪器会比 Stack Overflow 更适合讨论这个问题。

    【讨论】:

    • 感谢您的反馈@Alasdair。只是为了正确,它应该是` = False`,对吧?是的,可能 django 票务跟踪器是正确的地方,但这对我来说很不寻常......我的意思是报告一个我不确定它是否是错误的错误。是否有可能使特定警告静音?然后我建议在警告中添加对此的评论。
    • 您可以使用 SILENCED_SYSTEM_CHECKS 设置使检查静音。在您的情况下,我认为最好更改 URL 模式而不是使检查静音。
    • 我认为取消斜线检查也不是一个好的解决方案 - 除非可以在该行中仅取消 this specific 警告 - 这似乎不是案子。作为开发人员,为此提交功能请求可能不值得您花时间。而且我害怕写一个我不会成功:)好吧,我会结束这个问题,再次感谢你。
    猜你喜欢
    • 2014-07-03
    • 2012-03-04
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    • 2012-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多