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

How to fix a Django view that is not returning an HttpResponse Object? (CS50 Project 1)

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

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)
       })

这是什么问题,我该如何解决?

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

util.save_entry

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))

抱歉,我以为你有模型。

# 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 功能,创建和更新以查看它是否有效。