我一直在研究这个问题,但似乎没有找到问题。我试图从上传的文件中获取视频以在模板上工作,但我不断得到的是一个空白视频,虽然当我查看页面源或检查视频元素时,它似乎指向正确的视频,我试图使这项工作的所有解决方案都证明是无效的。 以下是我的代码:
我的模特:
class Sermon(models.Model):
topic = models.CharField('Topic', max_length=50)
pub_date = models.DateField('Sermon Date')
timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)
last_edited = models.DateTimeField(auto_now_add=False, auto_now=True)
type = models.CharField('Type', max_length=50, choices=sermon_chioices)
audio = models.FileField(upload_to='audios', default="Not Available", blank=True, validators=[validate_audio_extension], null=True)
video = models.FileField(upload_to='videos', default="Not Available", blank=True)#can be changed if the video will recide in the system
outlines = models.FileField(upload_to="outlines", default="Not Available", blank=True,)
user = models.ForeignKey(User, verbose_name="User", editable=False)
class Meta:
ordering = ['-pub_date']
def __unicode__(self):
return self.topic
def get_absolute_url(self):
#return reverse('sermon_detail', kwargs={'pk': self.pk})
return reverse('sermon_detail', args=[str(self.id)])
我的观点:
class SermonDetails(DetailView):
model = Sermon
template_name = 'agonopa/sermon_details.html'
context_object_name = 'sermon'
def get_context_data(self, **kwargs):
context = super(SermonDetails, self).get_context_data(**kwargs)
#context['sermons'] = Sermon.objects.all()
return context
#Sunday Service List
class SundayServiceSermonList(ListView):
model = Sermon
template_name = 'agonopa/sermon.html'
context_object_name = 'sermon_list' #'ss_sermon_list'
queryset = Sermon.objects.filter(type__exact="SUNDAY SERVICE")
def get_context_data(self, **kwargs):
context = super(SundayServiceSermonList, self).get_context_data(**kwargs)
context['title'] = 'Sunday Service'
return context
我的模板:
{% if sermon %}
<h3>{{ sermon.topic}}</h3>
{{sermon.outline}}
{{ sermon.pub_date}}
{% endif %}
<video loop class="embed-responsive-item thumbnails" controls>
<source src="{{ MEDIA_URL}}{{sermon.video.url}}" type="video/mp4">
</video>
MY MEDIA SETTINGS:
import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
PROJECT_DIR = os.path.dirname(BASE_DIR)
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(PROJECT_DIR,'churchsite_static_root','media_root')
服务器在终端中返回这样的内容:
[28/Nov/2015 11:38:10]"GET /agonopa/sermon/3/ HTTP/1.1" 200 377
[28/Nov/2015 11:38:10]"GET /media/videos/wowo_Boyz_5gQAbzG.mp4 HTTP/1.1" 404 2344
先谢谢你的帮助,如有进一步澄清,请告诉我。 应该注意的是,我已经尝试了许多来自stakeoverflow的解决方案,而且几个博客似乎都没有用,所以我不得不在这里发布。
答案 0 :(得分:1)
在我看来,你的MEDIA_ROOT
太高了(就像在你的项目中一样)。当我使用您使用的设置时,相对于您的../../../churchsite_static_root/media_root/
文件,我获得了settings.py
的媒体根目录。我希望churchsite_static_root
成为settings.py
之上的一个目录(或与manage.py
处于同一级别)。
进入Django shell并检查媒体根路径以查看它是否合理(并确认您的文件实际存在):
python manage.py shell
>>> from django.conf import settings
>>> settings.MEDIA_ROOT
在settings.py
中尝试以下操作,并告诉我它是否有帮助:
import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
MEDIA_ROOT = os.path.join(BASE_DIR, 'churchsite_static_root', 'media_root')
如果使用urls.py
,请确保您的网站python manage.py runserver
中有类似内容:
# For Django>=1.8:
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
# For Django<1.8:
if settings.DEBUG:
urlpatterns += patterns('',
(r'^media/(?P<path>.*)$', 'django.views.static.serve', {
'document_root': settings.MEDIA_ROOT}))
答案 1 :(得分:1)
我只是导入了设置,然后是静态的,还添加了if Debug:到我的urls.py,因此程序看起来如下:
Urls.py:
using Caliburn.Micro;
namespace CaliburnMicroExample
{
public class ShellViewModel : PropertyChangedBase
{
private string _message;
public string Message
{
get { return _message; }
set
{
_message = value;
NotifyOfPropertyChange(() => Message);
}
}
public ShellViewModel()
{
Message = "Hello World";
}
}
}
这就是它的全部。感谢Mike Covington。 另请注意,上面的媒体设置,模板和其他文件并没有改变整个工作。