我试图在我的网站上显示 mp4,并将其放入上下文中,但由于某种原因,当我访问该页面时,我得到以下信息:“类型对象“视频”没有属性“video_file”
尝试了一些方法,但没有一个起作用。
Views.py
def movie(request, movie_id):
movie = get_object_or_404(Video, title=movie_id) # This only gets the movie name
mp4 = Video.video_file.url
context = {'video': movie, 'mp4':mp4}
return render(request, template_name=f'uploadvideos/movie.html', context=context)
models.py
class Video(models.Model):
title = models.CharField(max_length=40, blank=False)
video_file = models.FileField(name="Upload a mp4 file",
upload_to=f"uploadvideos/video",
validators=[FileExtensionValidator(['mp4'])],
blank=False)
def __str__(self):
return self.title
电影.html
<h1 class="movietitle">{{ video }}</h1>
<div class="videoDetails">
<video width="700" height="430" controls>
<source src="{{ mp4 }}" type="video/mp4">
</video>
</div>
我预计会显示视频,但我收到了此错误:'类型对象'Video'没有属性'video_file'
Video
引用 Video
类,因为 Video
实例这里被命名为movie
,因此你应该使用:
def movie(request, movie_id):
movie = get_object_or_404(Video, title=movie_id)
context = {'video': movie, 'mp4': <b>movie.video_file.url</b> }
return render(request, 'uploadvideos/movie.html', context)
你的假设:
# This only gets the movie name
是错误的。这将加载一个 Video
对象。如果您渲染这个对象,它将调用该对象上的str(..)
函数,这确实会返回标题,但这不会 表示 movie
本身是一个字符串。
我是一名优秀的程序员,十分优秀!