通过将ID作为CharField

时间:2015-06-05 15:40:05

标签: python django youtube

我一直试图通过在类中传递视频ID并替换模板中的值来显示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 %}

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

1 个答案:

答案 0 :(得分:1)

在模板循环中,您已将对象定义为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。< / p>