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



我想建立一个Django网站,在这里我可以在季节和情节上上传系列。最后,它应该看起来像这样:

季节:

[1] [2] [3]

情节:

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

这些情节属于URL给出的季节。

我的代码看起来像这样:

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

最新更新