django - request.FILES 为空,但请求中存在文件
问题描述
按照django 网站上的示例,我正在尝试上传文件,对内容进行检查,然后反馈给用户并存储文件内容。
但是,我遇到了始终为空的 request.FILES 的问题。我的代码如下(注意打印语句后的输出):
**forms.py**
class UploadFileForm(forms.Form):
data_import = forms.FileField()
class Meta:
model = Recipe
fields = ('data_import',)
**view**
def recipes_list(request):
template = 'recipes/recipes_list.html'
if request.method == 'GET':
user = request.user
queryset = Recipe.objects.filter(user=user)
form = UploadFileForm()
return render(request, 'recipes/recipes_list.html', context={'recipes': queryset, 'form': form})
elif request.method == 'POST':
print(request.FILES) # <MultiValueDict: {}>
print(request.POST) # <QueryDict: {'csrfmiddlewaretoken': ['...'], 'data_import': ['recette.json']}>
form = UploadFileForm(request.POST, request.POST.data_import)
if form.is_valid():
return HttpResponseRedirect(template)
else:
print(form.errors)
**template**
<form method="post">
{% csrf_token %}
{{ form }}
<button type="submit">submit</button>
</form>
我得到的错误是:
<ul class="errorlist"><li>data_import<ul class="errorlist"><li>This field is required.</li></ul></li></ul>
但我可以看到文件已上传,并且位于request.POST.get('data_import')
.
我想在表单上运行验证,但如果 request.FILES 为空,我不能这样做。
我显然做错了什么,有人可以指出我正确的方向吗?
解决方案
<form method="post" enctype= multipart/form-data>
{% csrf_token %}
{{ form }}
<button type="submit">submit</button>
</form>
将您的表格更改为上面的表格
推荐阅读
- c# - 如何在 C# 中验证多部分压缩(即 zip)文件是否包含所有部分?
- python - 我怎样才能自动登录 sahbinden.com
- c - C 结构信息隐藏(不透明指针)
- flutter - 当应用程序处于后台时,我可以隐藏 Flutter 应用程序的内容吗?
- javascript - 如何在 VSCode 中启用多行 JS 字符串折叠(隐藏)?
- javascript - 仅针对一个组件实现路由器转换
- javascript - 如何为外部和内部元素添加不同的事件处理程序?
- node.js - Express 和 nodeJS:[对象:空原型] { }
- javascript - 如果在 iframe 中加载了特定页面,则触发重定向到另一个页面
- android-layout - 如何使 TextView 具有 maxLines 并且如果它不适合水平扩展?