2017-07-16 1 views
0

Je suis en train de concevoir un site web de rendu vidéo pour enfants.Filtrage de Queryset et conception d'urls.py et de templates corrects dans Django

  • L'application a des parents catégories pour exemple: dessins animés, l'éducation montre etc. Chaque catégorie a plusieurs messages tels que Jungle_book, Duck_tales etc pour les dessins animés.
  • Chaque poste a plusieurs épisodes.
  • J'utilise des vues génériques (listview, Detailview) pour les vues.

Voici mon Models.py

from django.db import models 
from personal.models import Post 


class cartoons_post(models.Model): 
    category= models.ForeignKey(Post, on_delete=models.CASCADE) 
    title = models.CharField(max_length = 140) 
    thumbnail=models.ImageField() 
    date=models.DateField() 


    def __unicode__(self): 
     return self.title 

    def __str__(self): 
     return self.title 

    def get_absolute_url(self): 
     return reverse("posts:detail", kwargs={"id": self.id}) 


class post_episode(models.Model): 
    post_id= models.ForeignKey(cartoons_post, on_delete=models.CASCADE) 
    title = models.CharField(max_length = 140) 
    thumbnail=models.ImageField() 
    date=models.DateField() 
    video=models.FileField() 


    def __unicode__(self): 
     return self.title 

    def __str__(self): 
     return self.title 

    def get_absolute_url(self): 
     return reverse("posts:detail", kwargs={"id": self.id}) 

Voici mon urls.py

from django.conf.urls import url, include 
from django.views.generic import ListView, DetailView 
from cartoons.models import cartoons_post,post_episode 
from django.contrib.auth.decorators import login_required 

urlpatterns = [ 

       url(r'^$', login_required(ListView.as_view(
           queryset=cartoons_post.objects.all().order_by("-date")[:10], 
           template_name="cartoons/cartoons.html"))), 
       url(r'^(?P<pk>\d+)$', login_required(ListView.as_view(
           queryset=post_episode.objects.filter(post_id=1).order_by("-date"), 
           template_name="cartoons/post.html"))), 
       url(r'^(?P<pk>\d+\d+)$',login_required(DetailView.as_view(
            model = post_episode, 
            template_name="cartoons/post_episode.html"))), 
      ] 

Voici mes trois modèles

cartoons.html

{% extends "personal/header.html" %} 
 
{% load staticfiles %} 
 
{% block content %} 
 
{% for cartoons_post in object_list %} \t 
 
\t <a href="/cartoons/{{cartoons_post.id}}"> <img src= "{{cartoons_post.thumbnail.url}}" width="200" height="220"> </a> 
 
{% endfor %}  
 
{% endblock %}

post.html

{% extends "personal/header.html" %} 
 
{% load staticfiles %} 
 
{% block content %} 
 
{% for post_episode in object_list %} \t 
 
\t <a href="/cartoons/{{post_episode.id}}"> <img src= "{{post_episode.thumbnail.url}}" width="200" height="220"> </a> 
 
{% endfor %} \t 
 
{% endblock %}

post_episode.html

{% extends "personal/header.html" %} 
 
{% load staticfiles %} 
 
{% block content %} 
 
\t <div class="container-fluid_cartoons"> 
 
\t <h3>{{post_episode.title}}</h3> 
 
\t <video width="850" height="500" controls> 
 
    \t <source src="{{post_episdoe.video.url}}" type="video/mp4"> 
 
\t Your browser does not support the video tag. 
 
\t </video> 
 
\t </div> \t 
 
{% endblock %}

Questions - Seulement cartoons.html fonctionne très bien.

  • Une fois que je clique sur un poste individuel de la post.html pertinente montre tout l'épisode téléchargé plutôt que les épisodes se rapportant à personne uniquement après.

  • Une fois que je clique sur un épisode, rien ne se passe.

+0

Vous devez utiliser @ python_2_unicode_compitable plutôt que sur mesure à la fois __unicode__ et __str__ – williezh

+0

Merci @ williezh –

Répondre

0

Vous devriez envisager de créer un fichier views.py plutôt que d'utiliser des vues génériques dans urls.py. Je pense que problème est avec la ligne suivante

url(r'^(?P<pk>\d+)$',login_required(ListView.as_view(queryset=post_episode.objects.filter(post_id=1).order_by("-date"),template_name="cartoons/post.html"))), 

Ici, Si ma conjecture est correcte, vous essayez de passer id du modèle de poste de URL pour voir. Mais pour que ListView accepte l'url kwargs (post_id), vous devez écrire une autre vue dans views.py. Peut-être quelque chose comme ci-dessous.

class EpisodeListView(ListView): 
    template_name = 'cartoons/post.html' 
    def get_queryset(self): 
     return post_episode.objects.filter(post_id=self.kwargs['post_id']).order_by("-date") 

Puis itinéraire une URL à ce point de vue:

from <yourapp.views> import EpisodeListView 
from django.contrib.auth.decorators import login_required 
url(r'^episodes/(?P<pk>\d+)$',login_required(EpisodeListView.as_view())