2016-05-27 4 views
1

Freunde, ich möchte wissen, wie wir Ergebnisse von zwei verschiedenen Abfragesätzen in Django-Vorlage präsentieren können.Wie man Ergebnisse von zwei Abfragesätzen in Django-Vorlage randomisiert

Mein views.py ist wie folgt:

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

und Meine Vorlage ist:

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

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

Aber wie erwartet, das die Fragen zuerst und dann Antworten listet. Ich möchte Fragen und Antworten nach dem Zufallsprinzip haben. Antworten und Fragen können in beliebiger Reihenfolge in der Vorlage erscheinen. Wie mache ich das, Freunde?

Antwort

2

Verwenden der shuffle Funktion?

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()) 

Nun haben Sie eine Liste, die mixed ... gemischt wird. Sie können darüber schleifen. Und Sie können ihre Art in der Vorlage überprüfen, mit:

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

(So stellen Sie sicher, dass die Fragen nicht über ein answer Feld)

+1

Das ist, was ich tun würde. Sie brauchen nicht einmal den if-Block. '{{item.answer}} {{item.title}}' wird den einen, der existiert, und einen leeren String für den anderen rendern ;-) – schwobaseggl

+0

Ich nahm an, dass er komplexeres Rendering für jedes hatte, was er für die Frage zurechtlegte. Wenn nicht, funktioniert Ihr Ansatz definitiv. – spectras

+0

Stimmt natürlich und sauberer. Ich hielt es für einen kleinen, wissenswerten Trick. – schwobaseggl

Verwandte Themen