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' の両方が機能します。

1 つの形式にしかリンクしていない場合でも、手動で URL を入力するか、外部ソースからリンクすることによって、人々がおそらく両方にアクセスすることがわかっているため、これは役に立ちます。しかし、これらは検索エンジンによって 2 つの異なる 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 に答える