繁体   English   中英

Django:使用url给出的第二个参数

[英]Django: Use 2nd argument given by url

我想创建一个Django网站,我可以上传季节和剧集的系列。 最后看起来应该是这样的:

季节:

[1] [2] [3]

情节:

[1] [2] [3] [4] [5] [6]  

剧集属于网址给出的季节。

我的代码看起来像这样:

models.py:

class Serie(models.Model):
    title = models.CharField(max_length=120)
    thumbnail = models.ImageField(upload_to=serie_dir_path)
    ...


class Season(models.Model):
    order = models.IntegerField()
    serie = models.ForeignKey(Serie, on_delete=models.CASCADE)
    ...

class Episode(models.Model):
    title = models.CharField(max_length=120)
    order = models.IntegerField()
    episode = models.FileField(upload_to=episode_dir_path)
    season = models.ForeignKey(Season, on_delete=models.CASCADE)
    ...

views.py:

class SeriesDetailView(DetailView):
    model = Serie

    def get_context_data(self, **kwargs):
        context = super(SeriesDetailView, self).get_context_data(**kwargs)
        context.update({
            'seasons': Season.objects.all(),
            'episodes': Episode.objects.all()
        })
        return context

urls.py:

urlpatterns = [
    path('library', LibListView.as_view(), name='library'),
    path('series/<int:pk>/season/<int:order>', SeriesDetailView.as_view(), name='serie-detail'),
]

lib.html:

<a href="{% url 'serie-detail' serie.id 1 %}">

(1是因为我想要第一季)

serie_detail.html:

<section class="section mt-5">
        <div class="container">
        <h1>{{ serie.title }}</h1>
        <img class="card-img-top mb-2" src="{{ serie.thumbnail.url }}" style="height: 319px; width: 220px;">
        <h6>Uploaded by: <h6 class="category text-warning"> {{serie.createdUser.username}}</h6></h6>
            <div class="row">
                <h4 class="mb-0">Seasons:</h4>
            </div>
            <div class="row">
            {% for season in serie.season_set.all %}
                <a href="" class="btn btn-default float-left">{{ season.order }}</a>
            {% endfor %}
            </div>
            <div class="row">
                <h4 class="mb-0">Episodes:</h3>
            </div>
            <div class="row">
            {% for season in serie.season_set.all %}
                {% for episode in season.episode_set.all %}
                    <a href="{% url 'episode-detail' episode.id %}" class="btn btn-default float-left btn-sm">{{ episode.order }}</a>
                {% endfor %}
            {% endfor %}
            </div>
        </div>
    </section>

使用上面的代码,结果如下所示:

季节:

[1] [2]  

情节:

[1] [1] 

它需要第二季的第一集,也表明了这一点。

我很感激任何帮助。

我假设您需要显示仅一个特定季节的所有季节剧集(在这种情况下为第1季)。 您需要修改以下代码:

class SeriesDetailView(DetailView):
    model = Serie

    def get_context_data(self, **kwargs):
        order = kwargs.get("order")
        context = super(SeriesDetailView, self).get_context_data(**kwargs)
        context.update({
            'seasons': Season.objects.all(),
            'episodes': Episode.objects.filter(season=order)
        })
        return context

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM