5

私は Django チュートリアルを進めており、パート 5: テストに取り組んでいます。DetailView および ListView の「ショートカット」ビューを使用して (チュートリアルで提案されているように) コードを除外するという問題に遭遇しましたが、404 ページが表示されると、代わりに 200 ステータス コードが返されます。私は何か間違ったことをしていますか?チュートリアルによると、ステータス コードは 404 である必要があります。

ありがとう!

4

2 に答える 2

5

404 ステータスを持つように Http ヘッダーを定義する必要があります。

return HttpResponse(content=template.render(context), content_type='text/html; charset=utf-8', status=404)

現在のページが 404 であることを検索エンジンに知らせることが重要です。スパマーは、ユーザーをどこかに誘導するように見える多数の URL を作成することがありますが、別のコンテンツを提供します。多くの場合、多くの異なるアドレスがほぼ同じコンテンツを提供します. また、ユーザー フレンドリーではないため、ほとんどの SEO ガイドラインでペナルティが課せられています。そのため、同じ疑似 404 コンテンツを示すアドレスが多数ある場合、検索 Web サイトのクロール システムに適切に表示されない可能性があります。そのため、カスタム 404 として提供しているページが 404 ステータスであることを確認する必要があります。

カスタム 404 ページを作成しようとしている場合は、次の方法をお勧めします。

アプリケーションの urls.py に次を追加します。

# Imports
from django.conf.urls.static import static
from django.conf.urls import handler404
from django.conf.urls import patterns, include, url
from yourapplication import views

##
# Handles the URLS calls
urlpatterns = patterns('',
    # url(r'^$', include('app.homepage.urls')),
)

handler404 = views.error404

アプリケーションの views.py に次を追加します。

# Imports
from django.shortcuts import render
from django.http import HttpResponse
from django.template import Context, loader


##
# Handle 404 Errors
# @param request WSGIRequest list with all HTTP Request
def error404(request):

    # 1. Load models for this view
    #from idgsupply.models import My404Method

    # 2. Generate Content for this view
    template = loader.get_template('404.htm')
    context = Context({
        'message': 'All: %s' % request,
        })

    # 3. Return Template for this view + Data
    return HttpResponse(content=template.render(context), content_type='text/html; charset=utf-8', status=404)

シークレットは最後の行にあります: status=404

それが役に立ったことを願っています!

このアプローチに対するコミュニティの意見を楽しみにしています。=)

于 2013-04-26T14:03:24.337 に答える
0

あなたはできる

return HttpResponseNotFound(render_to_string('404.html')) 

代わりは。

于 2012-12-30T01:05:42.763 に答える