【问题标题】:Filtering Queryset and designing correct urls.py and templates in Django在 Django 中过滤 Queryset 并设计正确的 urls.py 和模板
【发布时间】:2017-12-21 02:43:15
【问题描述】:

我正在设计一个视频渲染儿童网站。

  • 该应用具有父 类别,例如:卡通、教育节目等。每个 类别 有多个 帖子,例如 Jungle_book、Duck_tales 等卡通。
  • 每个帖子都有多个剧集
  • 我正在为视图使用通用视图(列表视图、详细视图)。

这是我的 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})

这是我的 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"))),
            ]

这是我的三个模板

cartoons.html

{% extends "personal/header.html" %}
{% load staticfiles %}
{% block content %} 
{% for cartoons_post in object_list %}	
	<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 %}	
	<a href="/cartoons/{{post_episode.id}}"> <img src= "{{post_episode.thumbnail.url}}" width="200" height="220"> </a>
{% endfor %}	
{% endblock %}

post_episode.html

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

问题 - 只有 cartoons.html 可以正常工作。

  • 点击单个帖子后,相关 post.html 会显示上传的所有剧集,而不是仅与单个帖子相关的剧集。

  • 点击一集后,什么也没有发生。

【问题讨论】:

  • 你应该使用 @python_2_unicode_compitable 而不是自定义 unicodestr

标签: python html django models


【解决方案1】:

您应该考虑创建views.py 文件,而不是在 urls.py 中使用通用视图。我认为问题在于以下行

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"))),

在这里,如果我的猜测是正确的,您正在尝试将帖子模型的 id 从 url 传递到视图。但是要让 ListView 接受 url kwargs (post_id),您必须在 views.py 中编写另一个视图。也许像下面这样。

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")

然后将 url 路由到该视图:

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

【讨论】:

    猜你喜欢
    • 2015-08-22
    • 1970-01-01
    • 2022-01-22
    • 2021-02-15
    • 2014-07-13
    • 2012-01-26
    • 1970-01-01
    • 2021-06-16
    • 2017-04-15
    相关资源
    最近更新 更多