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 を押しているときに、最後の投稿 (予想どおり) または最初の投稿 (明らかな理由なし) がランダムに (最後の投稿の場合もあれば、最初の投稿の場合もある) 印刷される理由がわかりません。

この動作は、django 開発サーバー (常に最後の投稿を表示する) ではなく、mod_wsgi で実行されている apache2 で発生します。

誰にも手がかりはありますか?

どうもありがとう

編集: 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

毎回すべてのメッセージではなく、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ではそうする必要がないため、考えていませんでした)。

また、messages = get_list_or_404(Message.objects.order_by('publication_date')) を last = get_list_or_404(Message).latest('publication_date') に置き換えました。これはより簡潔です。

あなたの助けと答えをありがとう!

于 2012-08-15T22:04:43.227 に答える