通过将 id 作为 CharField 传递来在 django 1.8 中显示 youtube 视频

Displaying youtube video in django 1.8 by passing id as CharField

我一直在尝试通过在 class 中传递视频 ID 并替换 template.But 中的值来显示 YouTube 视频,但这似乎没有发生。 我的 models.py

从 django.db 导入模型

class Rockinfo(models.Model):
   rock_name = models.CharField(max_length=200,default="ac/dc")
   rock_img = models.ImageField(upload_to="%Y/%m/%d",default="1992/08/92")
   rank = models.IntegerField(default=0)


def __str__(self):              
    return self.rock_name


class Rockvids(models.Model):
   rockername = models.ForeignKey(Rockinfo)
   vid_id = models.CharField(max_length=200,default="Z7JgY9zezj4")
   vid_name = models.CharField(max_length=300,default="Something Inside Me")
   vid_singer_name = models.CharField(max_length=300,default="Jonathan Reyes Myers")

def __str__(self):
    return self.vid_id

我的admin.py

from django.contrib import admin
from .models import Rockinfo, Rockvids

class ChoiceInline(admin.TabularInline):
  model = Rockvids
  extra = 10

class RockinfoAdmin(admin.ModelAdmin):
  fieldsets = [
  ('The Fucking Band',               {'fields': ['rock_name']}),
  ('Image', {'fields': ['rock_img']}),
]
inlines = [ChoiceInline]  
list_display = ('rock_name', 'rock_img')
list_filter = ['rank']
search_fields = ['rock_name']


admin.site.register(Rockinfo, RockinfoAdmin)

我的应用程序的 urls.py

from django.conf.urls import url

from . import views

urlpatterns = [
   url(r'^$', views.IndexView.as_view(), name='index'),
   url(r'^(?P<pk>[0-9]+)/$', views.DetailView.as_view(), name='detail'),
]

我的应用程序的 views.py 文件

from django.shortcuts import get_object_or_404, render
from django.http import HttpResponseRedirect, HttpResponse
from django.core.urlresolvers import reverse
from django.views import generic
from .models import Rockvids, Rockinfo


class IndexView(generic.ListView):
   template_name = 'rockinglist/index.html'
   context_object_name = 'latest_rockinfo_list'

   def get_queryset(self):
    return Rockinfo.objects.order_by('-rank')[:50]


   class DetailView(generic.DetailView):
    model = Rockinfo
    template_name = 'rockinglist/detail.html'

index.html 文件

 {% if latest_rockinfo_list %}
 <ul>
 {% for rockinfo in latest_rockinfo_list %}
 <h1>{{ rockinfo.rock_name }}</a></li>
 <img src="img\{{ rockinfo.rock_img }}" alt="ac/dc">
 {% endfor %}
 </ul>
 {% else %}
 <p>No</p>
 {% endif %}

detail.html 文件

<h1>{{ rockinfo.rock_name }}</h1>
{% for choice in rockinfo.rockvids_set.all %}
<img id="hide" src="http://img.youtube.com/vi/{{ rockvids.vid_id   }}/hqdefault.jpg" data-video="https://www.youtube.com/embed/{{ rockvids.vid_id }}?autoplay=1" width="480" height="300"/>


{% endfor %}

我一直在尝试使用 Rockvidsclass 中传递的视频 ID 在用户点击图像后显示所有 YouTube 视频,但循环中似乎存在一些错误。提前致谢。

在您的模板循环中,您已将对象定义为 choice。就这样引用它,而不是使用 rockvids。见下文。

{% for choice in rockinfo.rockvids_set.all %}
<img id="hide" src="http://img.youtube.com/vi/{{ choice.vid_id   }}/hqdefault.jpg" data-video="https://www.youtube.com/embed/{{ choice.vid_id }}?autoplay=1" width="480" height="300"/>
{% endfor %}

由于您将有多个图像,您可能还想将 id="hide" 更改为 class="hide",因为页面上应该只有一个元素具有给定的 id .