Django - 如何从模板中的查询集中获取最后一项
Django - how get last item from queryset in template
我是 Django 的完全初学者,不会做一些非常基础的事情; link 到数据库中的最后一个(或第一个)项目。
首先,这是我正在使用的模型:
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})
我在我的视图中创建了以下查询集:
class ArtworkDetailView(DetailView):
model = Artwork
template_name = 'artwork_detail.html'
qs = Artwork.objects.all()
现在在我的模板中,我试图为查询集中的最后一项提供 link。但是我不知道用什么填充 href 属性以提供这样的 link:
{% 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>
我已经通过将 url 到 https://www.google.com 放入其中来测试 if 条件是否正常工作。我的问题确实是将查询集中最后一项的绝对 url 放入我的模板中。
谢谢,
乔恩
您可以通过覆盖 get_object
方法获得 .latest(…)
或 .last()
:
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<b>.latest('date')</b>
或者您可以使用专用方法:
class ArtworkDetailView(DetailView):
model = Artwork
template_name = 'artwork_detail.html'
def <b>latest_artwork</b>(self):
return Artwork.objects<b>.latest('date')</b>
并在视图中渲染它:
<a href="{{ <b>view.latest_artwork.get_absolute_url</b> }}">
注意你模型打错了,是get_absolute_url
,不是get_absolute_urls
.
我是 Django 的完全初学者,不会做一些非常基础的事情; link 到数据库中的最后一个(或第一个)项目。
首先,这是我正在使用的模型:
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})
我在我的视图中创建了以下查询集:
class ArtworkDetailView(DetailView):
model = Artwork
template_name = 'artwork_detail.html'
qs = Artwork.objects.all()
现在在我的模板中,我试图为查询集中的最后一项提供 link。但是我不知道用什么填充 href 属性以提供这样的 link:
{% 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>
我已经通过将 url 到 https://www.google.com 放入其中来测试 if 条件是否正常工作。我的问题确实是将查询集中最后一项的绝对 url 放入我的模板中。
谢谢,
乔恩
您可以通过覆盖 get_object
方法获得 .latest(…)
或 .last()
:
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<b>.latest('date')</b>
或者您可以使用专用方法:
class ArtworkDetailView(DetailView):
model = Artwork
template_name = 'artwork_detail.html'
def <b>latest_artwork</b>(self):
return Artwork.objects<b>.latest('date')</b>
并在视图中渲染它:
<a href="{{ <b>view.latest_artwork.get_absolute_url</b> }}">
注意你模型打错了,是get_absolute_url
,不是.get_absolute_urls