0

これは私が得ているエラーです: ビュー myapp.views.view_page は HttpResponse オブジェクトを返しませんでした

ここで私が間違っていることを誰かが見ることができますか? HttpResponseRedirect を返しているため、なぜその例外が発生するのか理解できないようです。

ビュー.py

from myapp.models import Page
from django.shortcuts import render_to_response
from django.http import HttpResponseRedirect
from django.template import Template, RequestContext
from django.core.context_processors import csrf

def view_page(request, page_name):
        try:
                    page = Page.objects.get(pk=page_name)
        except Page.DoesNotExist:
                    return render_to_response("create.html", {"page_name" :page_name},context_instance=RequestContext(request))

                    content=page.content
                    return render_to_response("view.html", {"page_name" :page_name , "content" :content},context_instance=RequestContext(request))

def edit_page(request, page_name):
        try:
                    page = Page.objects.get(pk=page_name)
                    content=page.content
        except Page.DoesNotExist:
                    content = ""
                    return render_to_response("edit.html", {"page_name" :page_name, "content" :content},context_instance=RequestContext(request))         

def save_page(request, page_name):
                content = request.POST["content"]
        try:
                    page = Page.objects.get(pk=page_name)
                    page.content=content

        except Page.DoesNotExist:
                    page = Page(name=page_name, content=content)
                    page.save()
                    return HttpResponseRedirect("/myproject/" + page_name + "/")
4

3 に答える 3

1

例外が発生しなかった場合、何も返さない実行パスがありました。あなたが持っていたインデントは、両方の return ステートメントを except ブロックに入れていました。実質的に2回目のリターンを実行することはありません:

from django.shortcuts import render

def view_page(request, page_name):
    try:
        page = Page.objects.get(pk=page_name)
    except Page.DoesNotExist:
        return render(request,"create.html",{"page_name" :page_name})

    content=page.content
    return render(request,"view.html",{"page_name":page_name,"content":content})

他の方法でも同じことを行う必要があります。

def edit_page(request, page_name):

    try:
        page = Page.objects.get(pk=page_name)
        content=page.content
    except Page.DoesNotExist:
        content = ""
    return render(request,"edit.html", {"page_name":page_name,"content":content})

def save_page(request, page_name):

    content = request.POST["content"]
    page,_ = Page.objects.get_or_create(pk=page_name)
    page.content = content
    page.save()
    return HttpResponseRedirect("/myproject/" + page_name + "/")

自動的に含まれるrenderショートカットを使用していますRequestContext

于 2012-10-15T08:01:50.507 に答える
1

あなたのインデントは単に間違っています。問題が解決したかどうかはわかりませんが、質問の 1 分後に最初のコメントで述べたように、次のことを行う必要があります。

  • 1 つのメソッドを除くすべてにコメントを付ける
  • たとえば、メソッド view_page を保持します
  • トライをよく見る
  • 次のことを考えてみてください:すべての場合に何かを返しますか?
    • 私はtry条項に何かを返していますか?
    • 私は自分のexcept条項で何かを返していますか?
    • 私のインデントは多分間違っていますか?

コードをよく見ると、それが見つかりますか? :)

于 2012-10-15T20:11:11.047 に答える
0

ビューのview_page関数は

def view_page(request, page_name):
    try:
        page = Page.objects.get(pk=page_name)
        content=page.content
    except Page.DoesNotExist:
        content=None
    return render_to_response("view.html",{"page_name": page_name,
                                           "content": content},
                              context_instance=RequestContext(request))

同様に、編集と保存の方法は

def edit_page(request, page_name):
    try:
        page = Page.objects.get(pk=page_name)
        content=page.content
    except Page.DoesNotExist:
        content = ""
    return render_to_response("edit.html", {"page_name": page_name,
                                            "content": content},
                              context_instance=RequestContext(request))         

def save_page(request, page_name):
    content = request.POST["content"]
    try:
        page = Page.objects.get(pk=page_name)
        page.content=content
    except Page.DoesNotExist:
        page = Page(name=page_name, content=content)
    page.save()
    return HttpResponseRedirect("/myproject/" + page_name + "/")
于 2012-10-15T17:54:56.213 に答える