一个 Django 表单正在处理 Excel 文件,而另一个表单正在处理视频文件。但视频文件表单从未显示出来...如果有人了解我的代码周围发生的情况,希望获得任何帮助
设置.py
# Media uploading
MEDIA_ROOT= os.path.join(BASE_DIR, '')
MEDIA_URL= "/"
当我运行本地主机并将 url 设置为媒体时,它恰好声称我的媒体不可用,所以我别无选择,只能将其 root 到根文件
url.py
from django.urls import path
from django.contrib import admin
from django.conf import settings
from django.conf.urls.static import static
import hello.views
urlpatterns = [
path("", hello.views.upload_file, name="index"),
path("upVideo", hello.views.showVideo, name="videoUpload"),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
模型.py
from django.db import models
class Document(models.Model):
docfile = models.FileField()
class Video(models.Model):
name= models.CharField(max_length=500)
videoFile= models.FileField(upload_to='videos/', null=True, verbose_name="")
videoFile= models.FileField(upload_to='somewhere/')
def __str__(self):
return self.name + ": " + str(self.videoFile)
表格.py
from django import forms
from .models import Video
class UploadFileForm(forms.Form):
file = forms.FileField()
class VideoForm(forms.ModelForm):
class Meta:
model= Video
fields= ["name", "videoFile"]
views.py
from django.shortcuts import render
from django import forms
from .models import Video
from .forms import UploadFileForm,VideoForm
#**************File Upload View****************#
def upload_file(request):
if request.method == "POST":
form = UploadFileForm(request.POST, request.FILES)
if form.is_valid():
extract = handle_uploaded_file(request.FILES['file'].file)
return render (request, 'dataDisplay.html', {'data':extract})
else:
form = UploadFileForm()
return render(request, "index.html",{"form": form})
#**************Video Upload View****************#
def showVideo(request):
if request.method == "POST":
lastVideo= Video.objects.last()
videoFile= lastVideo.videoFile
vForm= VideoForm(request.POST, request.FILES)
context= {'videoFile': videoFile,
'vForm': vForm
}
if vForm.is_valid():
vForm.save()
return render(request, 'index.html', context)
else:
vForm = VideoForm()
return render(request, "index.html",{"vForm": vForm})
index.html
<form action="" enctype="multipart/form-data" method="post" id="uploadingForm" target="_blank">
{% csrf_token %}
<span id="uploadedFile">{{ form }}</span>
<input type="submit" value="Submit" id="uploadButton">
</form>
<div id="uploadSection2">
<span>Option 3: Site Data</span>
<h1>Video Uploader</h1>
<form enctype="multipart/form-data" method="POST" action={% url 'videoUpload' %}>
{% csrf_token %}
{{ vForm.as_p }}
<input type="submit" value="Upload" disabled> <!-- forcefully disabled until figured out how-->
</form>
</div>
我已经进行了一些搜索,但仍然无法弄清楚发生了什么...仍然不知道为什么只有
vForm
永远不会出现...非常感谢任何帮助!
在同一模板中处理两个不同的请求时,可以在模板中使用条件表达式。还处理视图方法中的错误。
views.py
def upload_file(request):
if request.method == "POST":
# handling POST request
form = UploadFileForm(request.POST, request.FILES)
if form.is_valid():
extract = handle_uploaded_file(request.FILES['file'].file)
return render(request, 'dataDisplay.html', {'data': extract})
else:
# if form is not valid render form with error
return render(request, "index.html", {"form": form})
else:
# handling GET request to render form
form = UploadFileForm()
return render(request, "index.html", {"form": form})
#**************Video Upload View****************#
def showVideo(request):
if request.method == "POST":
# handling POST request
lastVideo = Video.objects.last()
videoFile = lastVideo.videoFile
vForm = VideoForm(request.POST, request.FILES)
context = {
'videoFile': videoFile,
'vForm': vForm
}
if vForm.is_valid():
vForm.save()
return render(request, 'index.html', context)
else:
# if form is not valid render form with error
return render(request, "index.html", {"vForm": vForm})
else:
# handling GET request to render form
vForm = VideoForm()
return render(request, "index.html", {"vForm": vForm})
index.html
{% if form %}
<form action="{% url 'index' %}" enctype="multipart/form-data" method="post" id="uploadingForm" target="_blank" >
{% csrf_token %}
<span id="uploadedFile">{{ form }}</span>
<input type="submit" value="Submit" id="uploadButton">
</form>
{% endif %}
{% if vForm %}
<div id="uploadSection2">
<span>Option 3: Site Data</span>
<h1>Video Uploader</h1>
<form enctype="multipart/form-data" method="POST" action="{% url 'videoUpload' %}">
{% csrf_token %}
{{ vForm.as_p }}
<input type="submit" value="Upload">
</form>
</div>
{% endif %}
确保
localhost:8000/
调用 upload_file()
方法并且 localhost:8000/upVideo
调用 showVideo()
方法。