2016-07-04 5 views
1

Ich versuche eine Seite zu erstellen, auf der ein YouTube-Player mit einem Standard-Video geladen ist. In der Sidebar habe ich ein paar Bilder von anderen Videos. Wenn auf eines der Bilder geklickt wird, lädt sich die Vorlage selbst neu, aber der YouTube-Player spielt jetzt das andere Video. Jedes dieser Bilder hat eine YouTube-URL, die beim Klicken abgespielt werden muss. Sehr ähnlich wie die YouTube-Seite eines Videos.Links als Variablen werden nicht korrekt von der Vorlage an urls.py an views.py weitergeleitet.

HTML:

   <div class="col-md-12 col-xs-12 video_menu_item"> 
      <div class="video_menu_description"> 
      <a href="/library/videos/" value="https://www.youtube.com/embed/EWrT-aBDxeI" name="para"> 
       <img src="/images/X.jpg" alt="Video name thumbnail" style="width:60%;height:100px;"> 
      </a> 
      </div> 
     </div> 

<div class="video_section_outer"> 
    <div class="col-md-12 col-xs-12 video_scroll_track"> 
     <div class="col-md-12 col-xs-12 video_item_outer"> 
      <h4 class="col-md-12 col-xs-12 video_track_sub_heading"><b>video.v_name</b></h4> 
      <div class="col-md-12 col-xs-12 test_button_start"> 
       <iframe width="420" height="315" src="{{ link }}" frameborder="0" allowfullscreen></iframe> 
      </div> 
     </div> 
    </div> 
</div> 

URLS.PY:

from django.conf.urls import include, url 
    from django.contrib import admin 

    urlpatterns = [ 

     # Video Sections 
     url(r'^library/tests/', 'bt.views.tests', name='tests'), 
     url(r'^library/videos-(?P<link1>[\w-]+)/', 'bt.views.videos', {'link': 'para'}), 
     url(r'^library/videos/', 'bt.views.videos', name='videos'), 
] 

VIEWS.PY:

@csrf_exempt 
def videos(request, link1 = "https://www.youtube.com/embed/Qj4nEYQA9ks"): 
    content = {"link" : link1} 
    return render_to_response('videos.html', content) 
+0

Sie müssen entweder Ajax für jeden Link wie hier http://stackoverflow.com/questions/13337731/using-the-django-url-tag-in-a-ajax-call oder json zurückgeben. Sie versuchen, eine einseitige App zu erstellen, während Sie eine Ansicht aufrufen, die Ihre Vorlage vollständig neu lädt, also müssen Sie sie entweder ajaxifizieren oder json zurückgeben und mehr Berechnungen am Frontend durchführen. Sehen Sie mehr auf diesem https://impythonist.wordpress.com/2015/06/16/django-with-ajax-a-modern-client-server-communication-practise/ – dmitryro

Antwort

0

Ich denke, dass es nicht ideal ist, die gesamte YouTube-URL zu übergeben. Sie können es nur durch das Bestehen der Video-ID als GET-Parameter wie diese einfach machen:

# urls.py 
urlpatterns = [ 
    # Video Sections 
    url(r'^library/tests/', 'bt.views.tests', name='tests'), 
    url(r'^library/videos/', 'bt.views.videos', name='videos'), 
] 

# views.py 
def videos(request): 
    link = 'https://www.youtube.com/embed/{}'.format(
     request.GET.get('id', 'Qj4nEYQA9ks') 
    ) 
    return render_to_response('videos.html', {'link': link}) 

# videos.html 
<a href="{% url 'videos' %}?id=EWrT-aBDxeI"> 
    <img src="/images/X.jpg" alt="Video name thumbnail"> 
</a> 
<iframe width="420" height="315" src="{{ link }}" frameborder="0" allowfullscreen></iframe> 

Lassen Sie mich wissen, wenn etwas nicht klar ist.

+0

Hey RL, ich weiß nicht, wie Ihr Gehirn verdrahtet ist aber das hat wie Magie funktioniert! Vielen Dank! Wenn ich Harry Porter Medaillen vergeben könnte, würdest du einen bekommen. Empfehlen Sie in der Zwischenzeit, die Django-Dokumentation vollständig zu lesen? Ich habe es nicht, weil es ziemlich groß ist und ich momentan nicht so viel Zeit habe - aber ich möchte ziemlich gut in dieser Umgebung entwickeln lernen. Ich habe vor 3 Wochen angefangen und bin mir nicht sicher, ob ich zu viel oder zu wenig Zeit nehme. –

+0

@DeepakMp dann vergeben den Mann die akzeptierte Antwort. Ich würde auch sehr empfehlen, dass Sie die gesamte Dokumentation lesen, es ist sehr hilfreich, nicht so groß und sehr knapp. – Wtower

+0

@DeepakMp Ha, ich denke, alles, was ich brauche, ist jetzt für dich, um es als akzeptierte Antwort zu machen. :) Wie auch immer, wie gesagt, es wird dringend empfohlen, die gesamte Dokumentation zu lesen, aber wenn Sie nicht viel Zeit haben, können Sie die gewünschte Anwendung entwickeln und dann einfach zurück zur Dokumentation gehen, wenn Sie ein Problem haben. –

Verwandte Themen