我正在构建一个电影搜索网络应用程序(使用Django),它将基本上采用以(.mp4,.avi,.mpg等)结尾的电影文件文件夹。当我运行填充脚本时,MySQL数据库将填充有关该电影的信息。
其中一列是电影的file_path。我有一个模板,它会显示电影的一些基本信息,旁边有一个播放按钮。
当您点击播放按钮时,它会将您带到另一个页面(使用电影标题的slug)并且您将看到嵌入的视频。
问题: 当我点击嵌入视频的播放按钮时,电影是否无法播放。 视频的file_path存储在数据库中,然后传递到django模板(所以我可以看到路径)。
有没有办法让django访问这些电影文件路径,以便它们可以在浏览器中播放? (或使用默认的linux媒体播放器)。
P.S。电影文件路径存储在MySQL数据库中。
以下是模型:
class Film(models.Model):
title = models.CharField(max_length=128, default='Blank', help_text='film title')
year = models.CharField(max_length=15, help_text='release year', blank=True, null=True)
rated = models.CharField(max_length=15, default=1, null=True, blank=True)
released = models.CharField(max_length=128, default='Blank', help_text='release date')
runtime = models.CharField(max_length=15, default='Blank', help_text='film length')
genre = models.ManyToManyField(Genre, default=1, blank=True)
director = models.ManyToManyField(Director, default=1, blank=True)
type = models.CharField(max_length=20, default='filmdb', help_text='series, movie etc')
actor = models.ManyToManyField(Actor, blank=True, verbose_name='Actor/Actress')
writer = models.ManyToManyField(Writer, blank=True, verbose_name='Writer')
award = models.CharField(max_length=128, default='Blank', null=True,help_text='film awards')
country = models.ManyToManyField(Country, default=1, blank=True)
language = models.ManyToManyField(Language)
plot = models.TextField(max_length=256, help_text="Film plot", null=True, blank=True)
poster = models.URLField(max_length=256, help_text='link to poster image', blank=True, null=True)
imdb_id = models.CharField(max_length=15, default=1, null=True, blank=True)
imdb_rating = models.CharField(max_length=15, null=True, blank=True)
meta_score = models.CharField(max_length=10, null=True,blank=True)
file_path = models.CharField(max_length=255, null=True, blank=True, default='N/A')
slug = models.SlugField(unique=True)
def save(self, *args, **kwargs):
self.slug = slugify(self.title)
super(Film, self).save(*args, **kwargs)
def __unicode__(self):
return self.title + self.year
答案 0 :(得分:1)
在不知道路径是绝对路径还是相对路径的情况下,您应该使用:
<video width="320" height="240" autoplay>
<source src="{{ movie.file_path }}" type="video/mp4"> Your browser does not support the video tag.
</video>
除此之外,我将使用相对路径,而不是绝对路径。这些文件必须由Apache,Nginx或Django的内置服务器提供服务。
这些文件的路径实际上应该与它们所服务的目录相关。例如,如果您通过Django管理员上传这些文件,则会将其上传到MEDIA_ROOT
,并且他们的.url
属性将与此相关。 E.g:
/movie/top_gun.mp4
对于大多数网站,我通常将MEDIA_ROOT
放在STATIC_ROOT
下,这样我就可以在开发或制作中轻松地为它们提供服务。
答案 1 :(得分:0)
我找到了一个解决方案并且暂停了这个电影网站项目以使用像Bottle和amp;这样的小框架提高我的技能。烧瓶中。
无论如何,当用户点击电影页面视图上的播放按钮时,我有该URL调用另一个视图,该系统调用VLC程序。由于文件路径是电影模型的一部分,我将其传递给VLC作为参数。所以每当我点击一部电影观看时,VLC就会打开。
缺点: - 只显示正在运行Django Film App的系统上的电影,而不是在浏览器中显示视频,用户将从另一台计算机上观看视频。
更新: 仍然没有找到Django解决方案。但这是我找到的boxcontrol - flask media streaming
的Flask示例答案 2 :(得分:0)
如果找到了路径,则将 .url 添加到模板html中jinja之类的代码的末尾,并且必须位于视频代码中,如下所示:
<video controls src="{{ Tutorials.attachments.url }}"></video>