python - Django 属性错误:“NoneType”对象没有属性“videofile”
问题描述
我正在按照本教程在我的 Django 项目中创建视频上传器并遇到此错误:
..src/video/views.py",第 9 行,在 showvideo videofile= lastvideo.videofile AttributeError: 'NoneType' object has no attribute 'videofile'
我确定我遗漏了一些明显的东西,并且一直在寻找答案。将不胜感激任何帮助。
views.py
from django.shortcuts import render
from .models import VideoUpload
from .forms import VideoForm
def showvideo(request):
lastvideo= VideoUpload.objects.last()
videofile= lastvideo.videofile
form= VideoForm(request.POST or None, request.FILES or None)
if form.is_valid():
form.save()
context= {'videofile': videofile,
'form': form
}
return render(request, 'video.html', context)
forms.py
from django import forms
from .models import VideoUpload
class VideoForm(forms.ModelForm):
class Meta:
model = VideoUpload
fields = ["name", "videofile"]
models.py
from django.db import models
class VideoUpload(models.Model):
name= models.CharField(max_length=500)
videofile= models.FileField(upload_to='videos/', null=True, verbose_name="")
def __str__(self):
return self.name + ": " + str(self.videofile)
from django.conf import settings
from django.contrib import admin
from django.urls import path
from django.conf.urls.static import static
from video.views import (
showvideo,
)
urlpatterns = [
path('showvideo', showvideo, name='showvideo'),
]
if settings.DEBUG:
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
仅供参考,我将模型的名称更新为“VideoUpload”而不是教程。
解决方案
您的数据库中没有 last_video 记录。为了防止这种情况出现错误,您可以将以下行更改为videofile= lastvideo.videofile
:
videofile = lastvideo.videofile if lastvideo else None
这将防止抛出错误。或者,您可以将整个位放在 try/except 块中。
推荐阅读
- python - 使用 for 循环在 python 的字典中打印键和/或值。寻找逻辑思维解释谢谢:D
- apache - 如何使用 .htaccess 缓存 woff 文件
- python - 如何将每个白色斑点与我的 png 图像分开?
- jquery - 单独控制多个表
- flexbox - 根据分辨率更改 Angular 材质按钮样式
- php - 使用 mysql 和 php 显示所有电影列表
- regex - 将 bash =~ 运算符更改为与 sh 兼容的参数
- mysql - 将表从 MS SQL 直接移动到 MySQL
- go - 使用 golang 库时的类型问题
- html - w3c 验证警告:文章缺少标题