0

我用 Django 创建了一个博客,我希望我最后发布的帖子出现在第一页。这是我的views.py代码:

   def index(request):
       messages = get_list_or_404(Message.objects.order_by('publication_date'))
       last = messages[-1]
       return render_to_response('posts/index.html', {
          'last_message' : last,                                                        
          'posts_list'   : messages,
       })

但我不明白为什么,在此页面上按 F5 时,它会随机打印最后一篇文章(如预期的那样)或第一篇文章(没有任何明显原因)(有时是最后一篇文章,有时是第一篇文章)。

这种行为发生在使用 mod_wsgi 运行的 apache2 而不是 django 开发服务器(它总是显示最后一篇文章)。

有没有人有任何线索?

非常感谢

编辑:这是我在 index.html 模板中使用的代码:

{% if last_message %}
 <article>
 <h1><a href="/posts/{{ last_message.id }}">{{ last_message.title }}</a></h1>
 <p class="meta_infos">Published on {{ last_message.publication_date }}</p>
 <p>{{ last_message.text }}</p>
 </article>
{% else %}
 <p>No post available</p>
{% endif %}
4

2 回答 2

1

我会这样做以确保您每次只拉回一个对象而不是所有消息:

messages = Message.objects.order_by('-publication_date')[:1]
if not messages:
    raise Http404
last = message[0]

或者你可以这样做:

try:
    last = Message.objects.order_by('-publication_date')[0]
except IndexError:
    raise Http404
于 2012-08-15T17:40:24.267 回答
0

好吧,伙计们,问题来自需要重新加载的apache服务器(PHP不需要这样做,这就是我没有想到的原因)。

我还用 last = get_list_or_404(Message).latest('publication_date') 替换了 messages = get_list_or_404(Message.objects.order_by('publication_date')) 哪个更简洁。

感谢您的帮助和回答!

于 2012-08-15T22:04:43.227 回答