视图未返回 HttpResponse 对象错误
Posted
技术标签:
【中文标题】视图未返回 HttpResponse 对象错误【英文标题】:Views didn't return an HttpResponse object error 【发布时间】:2014-07-27 07:10:26 【问题描述】:我正在将 excel 数据导入 mysql 数据库。这样做时,我看到了一个错误。
我的views.py文件:
db = MySQLdb.connect(host="localhost",
user="root",
passwd="",
db="upload")
test = 'c'
def list(request):
if request.method == 'POST':
form = DocumentForm(request.POST, request.FILES)
if form.is_valid():
newdoc = Document(docfile = request.FILES['docfile'])
newdoc.save()
newdoc = newdoc.docfile.name
newdoc = str(newdoc)
wb = xlrd.open_workbook(newdoc)
sh = wb.sheet_by_index(0)
c = 1
while c < len(sh.col(0)):
first = sh.col_values(0)[c]
second = sh.col_values(1)[c]
x = db.cursor()
db.set_character_set('utf8')
x.execute('SET NAMES utf8;')
x.execute('SET CHARACTER SET utf8;')
x.execute('SET character_set_connection=utf8;')
x.execute("INSERT INTO testcont_content(title, description) VALUES('%s','%s');"%(first,second))
db.commit()
c=c+1
return HttpResponseRedirect(reverse('upload.views.list'))
else:
form = DocumentForm() # A empty, unbound form
documents = Document.objects.all()
return render_to_response('upload/list.html','documents': documents, 'form': form, 'test': test,,context_instance=RequestContext(request))
我在“return HttpResponseRedirect(reverse('upload.views.list'))”行收到错误:
Internal Server Error: /upload/list/
Traceback (most recent call last):
File "C:\Python27\lib\site-packages\django\core\handlers\base.py", line 133, in get_response
raise ValueError("The view %s.%s didn't return an HttpResponse object." % (callback.__module__, view_name))
ValueError: The view upload.views.list didn't return an HttpResponse object.
[06/Jun/2014 10:39:20] "GET /upload/list/ HTTP/1.1" 500 60044
我的 forms.py 文件是:
class DocumentForm(forms.Form):
docfile = forms.FileField(
label='Select a file',
help_text='max. 42 megabytes'
)
urls.py 文件:
urlpatterns = patterns('',
url(r'^list/$', views.list, name='list'),
)
我不知道我在这里做错了什么。
【问题讨论】:
你的 reverse('upload.views.list') 会失败,因为你的 url 应该是 url(r'^list/$', views.list, name='upload.views.list ') 【参考方案1】:您需要在每次请求时返回 HttpResponse
对象(或子类,如 HttpResponseRedirect
)。在您的代码中,您正在检查请求是否通过 POST 发送,但您忘记返回响应。你的视图应该是这样的:
def list(request):
if request.method == 'POST':
form = DocumentForm(request.POST, request.FILES)
if form.is_valid():
newdoc = Document(docfile = request.FILES['docfile'])
# ... Your process
return HttpResponseRedirect(reverse('upload.views.list'))
else:
form = DocumentForm() # A empty, unbound form
# We reach there when the HttpResponseRedirect has not been called
documents = Document.objects.all()
return render_to_response('upload/list.html',
'documents': documents, 'form': form, 'test': test,,
context_instance=RequestContext(request))
【讨论】:
【参考方案2】:第一行:
if request.method == "POST":
没有其他部分。当您执行重定向时,该方法不会发布。因此,找不到 else 部分,因此没有返回 HttpResponse 对象
【讨论】:
以上是关于视图未返回 HttpResponse 对象错误的主要内容,如果未能解决你的问题,请参考以下文章
/change-password/ 处的 ValueError 视图 authapp.views.ChangePassword 未返回 HttpResponse 对象。它返回 None 而不是
ValueError - 视图没有返回 HttpResponse 对象。它返回 None 而不是
视图 chilegaleria.views.AgregarTienda_View 没有返回 HttpResponse 对象。它返回 None 而不是