2017-07-17 131 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