- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我第一次尝试创建一个小型 Django 应用程序。它只是一个具有两种形式的基本页面,一种是从数据库返回值的搜索形式(运行良好),另一种是插入形式(问题)。在插入表单中,有三个文本字段要求为数据库中的新行输入值。该应用程序称为“搜索器”。这是我的代码:
View .py
from django.http import HttpResponse
from django.template import Context
from django.template.loader import get_template
from searcher.models import Publisher
from django.db.models import Q
def search(request):
if "search" in request.GET:
value = request.GET['search']
results = Publisher.objects.filter(Q(city__contains=value) | Q(name__contains=value))
else:
value = "No term"
results = []
template = get_template("base.html")
html = template.render(Context({"value":value, "results":results}))
return HttpResponse(html)
def insert(request):
if "name" in request.POST:
for key in request.POST:
counter = 0
if key != '':
counter = counter + 1
if counter == len(request.POST):
row = Publisher(name=request.POST['name'], city=request.POST['city'], website=request.POST['website'])
row.save()
基础.html
<html>
<body>
<form method = "GET" action = "">
<input type = "text" name = "search"><input type = "submit">
</form><br>
you searched for:{{value}}<br>
your results:
{% for result in results %}
<br>{{result}}<br>
{% endfor %}
<br><br>
<form method = "POST" action = "/test/insert/">
<input type = "text" name = "name" value = "name"><br>
<input type = "text" name = "city" value = "city"><br>
<input type = "text" name = "website" value = "website"><br>
<input type = "submit">
</form>
</body>
</html>
网址.py
from django.conf.urls import patterns, include, url
from searcher import views
urlpatterns = patterns('',
url(r'^test/$', views.search),
url(r'^test/insert/$', views.insert),
)
错误是说“ValueError at/test/insert The view searcher.views.insert didn't return an HttpResponse object.”由于我提交了插入表格。
我明白错误的意思:抱歉,views.py 中的所有 View 都必须返回要显示的内容。
首先这是为什么?
其次,完成插入表单的正确方法是什么?目前我已经设置了表单 action = "/test/insert/"以便在 urls.py 中它可以识别提交的插入表单并调用函数插入,应该如何调用该函数?
最佳答案
你好像问了两个问题
“为什么所有 View 都必须返回要显示的内容?”
您误解了错误消息。你看到的错误没有说“所有观点必须返回一些东西来展示” - 它只说“searcher.views.insert 没有返回预期的 HttpResponse”。因为你正在处理一个 HTTP 请求(一个 POST 表单),你是预期会发回 HTTP 响应。所有 HTTP 请求都需要一个回应——这是关于如何回应的标准协议(protocol)的问题沟通 - 详细信息是 http standarddefinition 的一部分,并作为 this answer 的一部分进行了一些解释.
“完成插入表单的正确方法是什么?”
您正在正确实现它 - 只需发回 HTTP 响应对于 POST。它的代码几乎与你的代码相同发回以响应搜索请求(也许你会想要添加一条消息,说明插入成功完成,在搜索请求中,您可能已经返回了该项目正在搜索?)。
如果您希望避免完全刷新表单,您可能希望再次使用 ajax 调用而不是 http 调用,如所述here .
关于python - 收到错误并没有返回 HttpResponse 对象。到底是怎么回事?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18938044/
我是一名优秀的程序员,十分优秀!