Django - 如何从模板中的queryset中获取最后一个项目。

问题描述 投票:0回答:1

我是一个完全的Django初学者,不能做一些很基本的事情;链接到数据库中的最后(或第一个)项目。

首先,这是我正在使用的模型。

class Artwork(models.Model):
    date = models.DateField(auto_now_add=True)
    art = models.ImageField(upload_to='artworks/%Y')
    title = models.CharField(max_length=200)
    description = models.TextField(null=True, blank=True)
    herochoices = [('left', 'left'), ('middle', 'middle'), ('right', 'right')]
    hero = models.CharField(choices=herochoices, max_length=6, null=True, blank=True, unique=True, error_messages={'unique':'Another artwork already uses this hero position.'})  
    slug = slugify(title, allow_unicode=False)

    def __str__(self):
        return self.title

    def get_absolute_urls(self):
        return reverse('artwork_list', kwargs={'slug': self.slug})

我在我的视图中创建了如下的queryset。

class ArtworkDetailView(DetailView):
    model = Artwork
    template_name = 'artwork_detail.html'
    qs = Artwork.objects.all()

现在在我的模板中,我试图提供一个链接到queryset中的最后一个项目。但是我不知道该用什么来填充href属性来提供这样的链接。

{% extends 'base.html' %}

{% block content %}

    <h1>{{ artwork.title|title}}</h1>
    <div class="row">

        <div class="col-sm-1 float-left">
            <p class="arrows">
                {% if artwork.get_previous_by_date.id == '' %}
                        <a href="{{ ????? }}">
                {% else %}
                    <a href="/artwork/{{ artwork.get_previous_by_date.id }}/{{ artwork.get_previous_by_date.title }}/">
                {% endif %}
                    <span class="material-icons" style="font-size: 30pt">keyboard_arrow_left</span>
                </a>
            </p>
        </div>

我已经测试了if条件可以正常工作,把一个url放到 https:/www.google.com 在那里工作得很好。我的问题是如何将queryset中最后一个项目的绝对网址导入我的模板中。

谢谢你。

乔恩

django django-models django-templates django-queryset
1个回答
1
投票

你可以得到 .latest(…).last() 凌驾于 get_object 方法。

class ArtworkDetailView(DetailView):
    model = Artwork
    template_name = 'artwork_detail.html'

    def get_object(self, queryet=None):
        if queryset is None:
            queryset = self.get_queryset()
        return queryset.latest('date')

或者你可以使用一个专门的方法,

class ArtworkDetailView(DetailView):
    model = Artwork
    template_name = 'artwork_detail.html'

    def latest_artwork(self):
        return Artwork.objects.latest('date')

并在视图中渲染它。

<a href="{{ view.latest_artwork.get_absolute_url }}">

请注意,你在模型中打错了,它是: get_absolute_url,不 get_absolute_urls.

© www.soinside.com 2019 - 2024. All rights reserved.