【发布时间】:2015-09-13 20:38:00
【问题描述】:
我有这样的看法:
def do_some_work(request):
if request.method == "POST":
data = request.FILES['some_file']
I do some work in the file
dates_people= [list of things]
maestros = {dict of things}
talks_count= [same here]
return render(request, 'wappApp/work.html', context={'dates': dates_people, 'maestros': solo_users,'talks': talks_count})
通过点击模板中的按钮调用此视图
<form action="{% url "do_some_work" %}" method="POST" enctype="multipart/form-data">
<div class="form-group">
<label for="exampleInputFile">File input</label>
<input type="file" id="exampleInputFile" name="some_file">
</div>
<button type="submit" class="btn btn-default">Submit</button>
</form>
我得到的是,在选择文件并单击提交后,浏览器页面显示:“此网页不可用”,刷新页面后,我得到:
The view App.views.calculation didn't return an HttpResponse object. It returned None instead.
我尝试调试此视图但无法访问它。
这是该视图的网址:
url(r'^work/$', views.calculation, name='do_some_work'),
知道发生了什么吗?提前谢谢你
编辑
如果我的表单具有 POST 方法并且指向我的视图的“操作”,我不知道为什么返回 NONE 对象
谢谢
** 第二次编辑**
我将唯一的答案标记为正确只是因为我意识到我需要处理 Not POST 请求。
我不断得到 none 对象,因为我不知道为什么表单使用 GET 方法
编辑 3
根据@BriceP 的推荐,我将 {% csrf_token %} 标记添加到我的模板中。现在 POST 方法正在工作。
但显然我上传的文件(.txt 文件)并没有像预期的那样运行。
当我到达这一行“lines = data.split”时,我得到了这个错误:
'InMemoryUploadedFile' object has no attribute 'split'
但如果社区对我提出更多问题有疑问,我会写另一个问题。
谢谢
【问题讨论】:
-
1)
do_some_work在您的网址中查看 - 它来自哪里?应该改为calculation吗? 2) 渲染快捷键函数需要 template_name 参数。 -
对不起@chem1st 是的,你是对的,我改变了你提到的但仍然有同样的问题
-
再一次,您的
do_some_work视图在哪里?你得到一个 HttpResponse 错误,因为刷新后没有通过 post 发送数据。 -
@chem1st 是的,我改了,对不起。我正在做的是发送一个文件,“计算”视图必须 recibe 该文件,但这没有发生。
-
如果您的请求不是 POST 请求,视图将返回
None。您需要确保视图始终返回 HttpResponse 对象或抛出异常。