2012-09-02 60 views
0
URL請求

我記得,在默認情況下,一個URL的任何要求不匹配URL模式和不以斜線結束將被重定向到相同的URL後帶上slash.But我發生了問題。在Django

URL配置在我的項目:

#in urls.py file 
urlpatterns = patterns('', 
    url(r'^admin/', include(admin.site.urls)), 
    url(r'^cms/', include('cms.urls')) 
) 

#in the cms/ulrs.py 
urlpatterns = patterns('cms.views', 
    url(r'^category/(?P<slug>[-\w]+)/$', 'category', name="cms-category"), 
    url(r'^search/$', 'search', { 'template' : 'cms/story_list.html'}, name="cms- search"), 
) 

如果我輸入:127.0.0.1:8080/cms/search/工作。 但是,如果我鍵入127.0.0.1:8080/cms/search,然後404發生。

我只是想知道,爲什麼這個問題存在?任何人都可以給我一些提示嗎?謝謝 !

+2

您可能需要檢查你[APPEND_SLASH(https://docs.djangoproject.com/en/dev/ref:

這可以通過做這樣的事情在你的URL模式下得到解決/ settings /#append-slash)設置。 –

回答

3

解決這一問題將是檢查你的settings.py文件APPEND_SLASH的值由約翰王的建議最簡單的方法。這隻有在安裝了CommonMiddleware的情況下才有效。 https://docs.djangoproject.com/en/dev/ref/settings/#std:setting-APPEND_SLASH

或者,您可以在URL模式的末尾添加一個問號,以便使斜線變爲可選。

url(r'^search/?$', 'search', { 'template' : 'cms/story_list.html'}, name="cms- search"), 

這樣既 '127.0.0.1:8080/cms/search/' 和 '127.0.0.1:8080/cms/search' 將起作用。

這是有幫助的,因爲即使我們只能鏈接到一個格式,我們知道人們可能會兩者,通過手動輸入網址或從外部源鏈接訪問。但是這些被搜索引擎視爲兩個不同的網址。

url(r'^search$', redirect_to, {'url':'/search/'}), 
url(r'^search/?$', 'search', { 'template' : 'cms/story_list.html'}, name="cms- search"),