0

我记得,默认情况下,对与 URL 模式不匹配且不以斜杠结尾的 URL 的任何请求都将被重定向到带有尾部斜杠的相同 URL。但我遇到了一个问题。

我项目中的 URLConf:

#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。

我只是想知道为什么会出现这个问题?谁能给我一些提示?谢谢你 !

4

1 回答 1

3

解决此问题的最简单方法是按照 John Wang 的建议检查 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 或通过从外部来源链接来访问这两种格式。但这些被搜索引擎视为两个不同的 URL。

这可以通过在 URL 模式中执行以下操作来解决:

url(r'^search$', redirect_to, {'url':'/search/'}),
url(r'^search/?$', 'search', { 'template' : 'cms/story_list.html'}, name="cms- search"),
于 2012-09-02T10:23:55.050 回答