2016-12-29 63 views
0

我試圖簡單地給一個應用程序url一個選項/headless/,使其顯示不同的模板。django 1.10網址調度員不工作

project/urls.py有:

urlpatterns = [ 
    url(r'^datastore/', include('datastore.urls')), 
] 

app/urls.py有:

app_name = 'datastore' 
urlpatterns = [ 
    url(r'^$', views.index, name='index'), 
    url(r'^datastore/(?P<headless>"headless"{1})/$', views.index,name='index'), 
] 

我得到一個404錯誤與上面。

我也試過:

url(r'^datastore/(?P<headless>"headless"?)/$', 
url(r'^datastore/(?P<headless>\w{1})/$', views.index, name='index'), 
url(r'^datastore/(?P<headless>\w+)/$', views.index, name='index'), 

回答

2

你必須從應用程序中刪除urlpattern前綴/datastore/

app_name = 'datastore' 
urlpatterns = [ 
    url(r'^$', views.index, name='index'), 
    url(r'^(?P<headless>"headless"{1})/$', views.index,name='index'), 
] 

根據Django's documentation

每當Django遇到include() ,它會剔除 th的任何部分e URL匹配到該點,並將剩餘的字符串發送到包含的URLconf以供進一步處理。

因此,項目設置中的網址格式使用前綴datastore/。您應該可以通過嘗試/datastore/datastore/headless/來檢查是否如此(這應該適用於您當前的配置)。

但是請注意,正則表達式的組合與/datastore/headless//datastore//(在所有變體中都相同)匹配。這可能不是你想要的。威爾弗裏德的回答(這裏沒有解決真正的問題)告訴你如何更好地做我認爲你想做的事。

+0

* DOH * ...得到它'網址(R '^(θP 無頭{1})/ $',views.index,名稱= '指數'),' –

0

這可能是你的url的正則表達式。

如果您需要訪問網址:

  • /數據存儲/

  • /數據存儲/無頭/

您可以創建兩個網址,指向了同樣的觀點。

urlpatterns = [ 
    url(r'^$', views.index, name='index'), 
    url(r'^datastore/$', views.index, name='index'), 
    url(r'^datastore/(?P<headless>(headless))/$', views.index, name='index'), 
] 

如果需要,則不需要使用參數。如果你只有可能性沒有頭像。

urlpatterns = [ 
    url(r'^$', views.index, name='index'), 
    url(r'^datastore/$', views.index, name='index'), 
    url(r'^datastore/headless/$', views.index, name='index'), 
] 
+1

這是非常有用擺脫原始正則表達式所需的雙'/'。然而,它並沒有向'index'入口點提供關於是否存在'headless'的信息。 – nickie