2016-05-27 63 views
1

朋友們,我想知道我們如何在django模板中呈現來自兩個不同查詢集合的結果。如何從Django模板中的兩個查詢集合中隨機化結果

我views.py如下:

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

和我的模板是:

{% 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 %} 

(只需確保問題不具有answer場)

+1

這就是我想要做的。你甚至不需要if塊。 '{{item.answer}} {{item.title}}'會渲染一個存在的字符串和一個空字符串;-) – schwobaseggl

+0

我認爲他有更復雜的渲染每個,他修剪的問題。如果不是,你的方法肯定有效。 – spectras

+0

當然,更清潔。我認爲這是一個值得了解的小技巧。 – schwobaseggl