【问题标题】:How do you create a view that returns the next object in a given list? code included如何创建一个返回给定列表中下一个对象的视图?包含代码
【发布时间】:2011-05-01 06:08:12
【问题描述】:

我有一个在提供正确 URL 时显示对象信息的视图,但是我想创建一个类似的视图,从位于下一个的记录中返回 url 信息。

所以本质上是从我的第一个视图中获取信息,以某种方式最好按日期列出/排序,然后返回列表中下一个和上一个的记录。

有人可以向我解释一下,并提供一个简单的例子来说明我将如何做到这一点。我是 django 的新手,我被卡住了。非常感谢所有帮助。谢谢。

这是我使用的模型 URL 和视图

型号

class Body(models.Model):
    type = models.ForeignKey(Content)
    url = models.SlugField(unique=True, help_text='')
    published = models.DateTimeField(default=datetime.now)
    maintxt = models.CharField(max_length=200)

查看

def news_view(request, url):
    news = get_object_or_404(Body, url=url)
    next = news.get_next_by_published().get_absolute_url()
    return render_to_response('news/news_view.html', {
        'news': news,
        'next': next
    }, context_instance=RequestContext(request))

网址

url(r'^/(?P<url>[\w\-]+)/$', 'news_view', name="news_view"),

模板

<a href="{{ next.get_absolute_url }}">Next</a></p>

【问题讨论】:

  • #1:将 'url' 更改为 'slug',因为它就是这样。

标签: django django-models django-views


【解决方案1】:

get_absolute_url 添加到您的模型

class Body:
    #[....]
    def get_absolute_url(self):
        return "/%i/" % self.url # but please rename it to slug

获取视图中的下一个 url(使用get_next_by_FOO

def news_view(request, url):
    #[....]
    try
        next_url = news.get_next_by_published().get_absolute_url()
    except Body.DoesNotExist
        next_url = None
    return #[....] and include next_url

在你的模板中使用这个next_url

{% if next_url %}
<a href="{{next_url}}">next</a>
{% endif %}

【讨论】:

  • 如何限制视图,使其不会引发不存在的查询并随后引发错误?
  • 其实我不明白你的评论。但我认为答案是:“尝试......除了 Body.DoesNotExist”,然后你将 next_url 设置为 None。并在模板中检查其是否设置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-28
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 2020-02-16
  • 2011-03-11
  • 1970-01-01
相关资源
最近更新 更多