CS50项目1求助:Django维基搜索页面无法保存新条目
问题定位与解决
你的错误根源很明确:当POST请求的内容通过所有验证(标题和内容非空、条目不存在)后,视图函数既没有执行保存条目的逻辑,也没有返回任何HttpResponse对象,导致Django抛出ValueError。
修复步骤
- 添加条目保存逻辑:调用CS50维基项目中
util模块的save_entry方法(该方法负责将条目写入文件),传入标题和内容。 - 返回合法响应:保存完成后,重定向到新创建的条目页面,或者返回成功提示页面。
修改后的views.py代码
from django.shortcuts import render, redirect from . import util def new(request): if request.method == 'GET': return render(request, "encyclopedia/new.html", { "create_form": CreateForm(), "search_form": SearchForm() }) file_content = request.POST.get("content","") file_title = request.POST.get("title", "") if len(file_content) == 0 or len(file_title) == 0: return render(request, "encyclopedia/error.html", { "message": "Bad Request", "description": "Title and content cannot be empty", "status": 400 }) if util.get_entry(file_title): return render(request, "encyclopedia/error.html", { "message": "Bad Request", "description": "This page already exists", "status": 400 }) # 保存新条目 util.save_entry(file_title, file_content) # 重定向到刚创建的条目页面(需对应你的URL路由配置) return redirect("encyclopedia:entry", title=file_title)
补充说明
util.save_entry是CS50维基项目预设的工具函数,负责将Markdown格式的内容写入对应标题的文件中。redirect("encyclopedia:entry", title=file_title)假设你已为条目详情页设置了名为entry的URL路由并接收title参数,可根据实际路由配置调整。
内容的提问来源于stack exchange,提问作者triplikeido
相关产品推荐
相关产品推荐

