如何修复不返回HttpResponse对象的Django视图?(CS50项目1)

2024-10-01 13:37:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我在提交表单时收到以下错误

ValueError at /edit_entry/hi/
The view encyclopedia.views.edit_entry didn't return an HttpResponse object. It returned None instead.

下面是触发错误的views.py

def edit_entry(request, title):
   if request.method == "POST":
       form = NewEditEntryForm(request.POST)
       if form.is_valid():
           title = form.cleaned_data["title"]
           content = form.cleaned_data["content"]
           util.save_entry(title, content)
           return HttpResponseRedirect("/wiki/" + title)
   else:
       form = NewEditEntryForm()
       return render(request, "encyclopedia/edit_entry.html",{
       "form": NewEditEntryForm(),
       "title": title,
       "content": util.get_entry(title)
       })

问题是什么?如何解决

(我还需要帮助用现有数据预填充表单。我尝试过使用initial,但没有成功。用现有数据预填充表单的最佳方法是什么?)

util.save_条目

def save_entry(title, content):
    """
    Saves an encyclopedia entry, given its title and Markdown
    content. If an existing entry with the same title already exists,
    it is replaced.
    """
    filename = f"entries/{title}.md"
    if default_storage.exists(filename):
        default_storage.delete(filename)
    default_storage.save(filename, ContentFile(content))


Tags: forman表单returniftitlerequestsave
1条回答
网友
1楼 · 发布于 2024-10-01 13:37:19

对不起,我还以为你有模特呢

# on util.py

def get_entry_content(title):
    filename = f"entries/{title}.md"
    return default_storage.open(filename).read()

# on views.py
def edit_entry(request, title):
   if request.method == "POST":
       form = NewEditEntryForm(request.POST)
       if form.is_valid():
           title = form.cleaned_data["title"]
           content = form.cleaned_data["content"]
           util.save_entry(title, content)
           return HttpResponseRedirect("/wiki/" + instance.title)
   else:
       content = util.get_entry_content(title)
       initial_dict = {
           "title" : title,
           "content" : content,
       }
       form = NewEditEntryForm(initial=initial_dict)
   return render(request, "encyclopedia/edit_entry.html", {
       "form": form,
   })

好吧,我想如果这不是你想要的,我会在控制台中测试save_entry函数,创建并更新它,看看它是否有效

相关问题 更多 >