【问题标题】:How do you limit get_next_by_FOO inside a django view? code included如何在 django 视图中限制 get_next_by_FOO?包含代码
【发布时间】:2010-10-27 13:58:35
【问题描述】:

我在视图中使用 get_next_by_FOO 来显示一组记录中以下项目的绝对 url,但是当它到达查询集的末尾时会引发错误。

如何阻止我的视图引发此错误,而只是输出一些 html 让我知道它已经到了集合的末尾?

非常感谢所有帮助。

这是错误信息、我的视图和模板代码。

错误

    Exception Type:     DoesNotExist
    Exception Value:    Body matching query does not exist.

查看

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

模板

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

【问题讨论】:

    标签: django django-templates django-views


    【解决方案1】:

    蛮力答案是:

    def news_view(request, url):
        news = get_object_or_404(Body, url=url)
        try:
            next = news.get_next_by_published()
        except Body.DoesNotExist:
            next = None
        try:
            pre = news.get_previous_by_published()
        except Body.DoesNotExist:
            pre = None
        return render_to_response('news/news_view.html', {
            'news': news,
            'pre': pre,
            'next': next
            }, context_instance=RequestContext(request))
    

    模板:

    {% if next %}<a href="{{ next.get_absolute_url }}">Next News</a></p>{% else %}<span class="disabled">At Last Item</span>{% endif %}
    {% if pre %}<a href="{{ pre.get_absolute_url }}">Previous News</a></p>{% else %}<span class="disabled">At First Item</span>{% endif %}
    

    【讨论】:

      【解决方案2】:

      我这样做:

      def news_view(request, url):
          news = get_object_or_404(Body, url=url)
          return direct_to_template(request, 'news/news_view.html', {'news': news,})
      

      模板:

      {% with news.get_previous_by_pub_date as prev %}
         {% if prev %}
             <a class="left btn" href="{{ prev.get_absolute_url }}">Previous News</a>
         {% endif %}
      {% endwith %}
      {% with news.get_next_by_pub_date as next %}
          {% if next %}
              <a class="right btn" href="{{ next.get_absolute_url }}">Next News</a>
          {% endif %}
      {% endwith %}
      

      【讨论】:

        猜你喜欢
        • 2012-01-22
        • 1970-01-01
        • 2013-06-15
        • 2017-04-14
        • 2013-02-17
        • 1970-01-01
        • 2013-03-17
        • 2021-05-17
        • 2021-11-02
        相关资源
        最近更新 更多