Request.FILES.get пуст в проекте Django
Для проекта я хотел бы использовать два файла, загружаемые пользователем через два входа, для применения внешнего скрипта.
Моя проблема в том, что я получаю ошибку, потому что Django, похоже, не может найти эти входы. Поэтому у меня пустой объект вместо файла.
Вот мои коды:
home.html
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Home</title>
</head>
<body>
<h1>Home</h1>
<form action="/external/" method="post" enctype="multipart/form-data">
{% csrf_token %}
Input xlsx file :<br><br>
<input type="file" name="file1" accept=".xml" required><br>
<input type="file" name="file2" accept=".xml" required><br>
<input type="submit" value="Valider"><br>
</form>
</body>
</html>
views.py
from django.shortcuts import render
from .scripts.extScript import *
def home(request):
return render(request, 'home.html')
def external(request):
f1=request.FILES.get('file1')
f2=request.FILES.get('file2')
extScript(f1,f2)
return render(request,'home.html')
urls.py
from django.contrib import admin
from django.urls import include, path
from .views import *
urlpatterns=[
path('',home,name="home"),
path('external/',external, name="external")
]
архитектура:
DjangoProject
|
-views.py
-urls.py
-scripts
|
-extScript.py
templates
|
-home.html
и ошибка указывает, что тип f1 - < NoneType >
Хочу заметить, что я пытался поставить f1=request.FILES['file1'], а он мне пишет, что 'file1' не найден : raise MultiValueDictKeyError(key).
Если у кого-нибудь есть идея, я не могу решить эту проблему, я чувствую, что все в порядке. Кроме того, я выполнил такую же функцию на другом проекте, и она прекрасно работает, так что я не знаю.
Спасибо!
Это потому, что вы отправляете файлы с помощью "POST" запроса, который вы должны прослушать на ваших представлениях, потому что сначала он начинается с GET представления, которое не имеет файлов. Поэтому код должен выглядеть следующим образом:
def external(request):
if request.POST:
f1=request.FILES.get('file1')
f2=request.FILES.get('file2')
extScript(f1,f2)
return render(request,'home.html')
Я не знаю, но, возможно, вам нужно изменить submit на кнопку <button type="submit">Upload</button>
вместо <input>
.