簡體   English   中英

該視圖未返回HttpResponse對象

[英]The view didn't return an HttpResponse object

這是我得到的錯誤:視圖myapp.views.view_page沒有返回HttpResponse對象

誰能看到我在這里做錯了什么? 我似乎無法弄清楚為什么我會收到該異常,因為我正在返回一個HttpResponseRedirect。

views.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 + "/")

你有一個沒有返回任何東西的執行路徑 - 當沒有引發異常時。 你所擁有的縮進是將兩個return語句放在except塊中; 實際上從不執行第二次回報:

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 + "/")

我正在使用自動包含RequestContextrender快捷方式

你的縮進是完全錯誤的。 我不知道您是否已經解決了問題,但正如我在您提出的一分鍾后在第一條評論中所說,您應該執行以下操作:

  • 評論除一種方法之外的一切
  • 例如,保留方法view_page
  • 仔細看看嘗試
  • 想想以下幾點: 我是否在所有情況下都返回了一些東西?
    • 我是否在try條款中返回了一些內容?
    • 我是否在我的except子句中返回了一些內容?
    • 我的縮進可能是錯的

如果仔細查看代碼,你會發現它嗎? :)

您的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 + "/")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM