2016-05-27 7 views
1

フレンド、djangoテンプレートの2つの異なるクエリーセットの結果をどのように表示するかを知りたい。djangoテンプレートの2つのクエリーセットの結果をランダム化する方法

def index(request): 
    answers = Answer.objects.filter(user=request.user) 
    questions = Question.objects.filter(user=request.user) 
    return render(request,"welcome/index.html",locals()) 

と私のテンプレートは次のとおりです:次のように

私のviews.pyがある

{% extends "layout.html" %} 
{% block content %} 
    {% for q in questions %} 
     {{ q.title }} 
    {% endfor %} 

    {% for a in answers %} 
     {{ a.answer }} 
    {% endfor %} 
{% endblock %} 

しかし、予想通り、これは最初の質問を一覧表示し、その後の回答。無作為に質問と回答を表示したいと思います。回答と質問は、テンプレートの順序どおりに入力できます。どうすればいいのですか?

答えて

2

shuffle機能を使用していますか?今

import random 

def index(request): 
    answers = Answer.objects.filter(user=request.user) 
    questions = Question.objects.filter(user=request.user) 

    mixed = list(answers) + list(questions) 
    random.shuffle(mixed) 

    return render(request,"welcome/index.html",locals()) 

、あなたは...混合mixedリストを持っています。それをループすることができます。そして、あなたが使用して、テンプレートでその型をチェックすることがあります。

{% for item in mixed %} 
    {% if item.answer %} 
     {{ item.answer }} 
    {% else %} 
     {{ item.title }} 
    {% endif %} 
{% endfor %} 

私がやるだろうと何

+1

(ただ、質問がanswerフィールドを持っていないことを確認してください)。 ifブロックは必要ありません。 "{{item.answer}} {{item.title}}'は存在するものをレンダリングし、もうひとつは空の文字列を返します。 – schwobaseggl

+0

私は彼がもっと複​​雑なレンダリングをしていると仮定しました。そうでない場合、あなたのアプローチは間違いなく機能します。 – spectras

+0

真実はもちろん、クリーナーです。私はそれを知る価値のある小さなトリックと考えました。 – schwobaseggl

関連する問題