2016-05-27 10 views
0

Ich habe folgende Daten iterieren:Wie Daten in Python-django

[{ 
    'mp': [ < MpbMealPlan: MpbMealPlan object > , < MpbMealPlan: MpbMealPlan object > ], 
    'user': [ < User: mpowner mpowner > ] 
}, { 
    'mp': [ < MpbMealPlan: MpbMealPlan object > , < MpbMealPlan: MpbMealPlan object > ], 
    'user': [ < User: kvermaOwner Owner > ] 
}] 

Ich mag es in meiner django Vorlage iterieren. Wie gezeigt, sind dies zwei Datensätze mit jeweils zwei Schlüsseln (mp und Benutzer), wobei jeder Datensatz zu einem bestimmten Benutzer gehört. Also ich wnn es so, dass ich mps von Benutzer und Detail des Benutzers bekomme. Aber wenn ich versuche, es zu wiederholen, wie in der untenstehenden Antwort oder jeder anderen Antwort durch SO erklärt, bekomme ich jedes Mal bizarre Ergebnisse. mp can enthält weitere mehrere Datensätze, aber ich stecke nur bei der ersten Iteration fest. Ich bin sehr neu zu Python, es ist mein 3. Tag arbeiten. Jede Führung würde meinen Tag retten.

Sobald ich unten gelten:

{% for contributor in contributors.details %} 

    {{ contributor }} 

{% endfor %} 

und ich habe diese Ausgabe, die Pause Tiefen der Struktur:

{ 
    'mp': [ < MpbMealPlan: MpbMealPlan object > , < MpbMealPlan: MpbMealPlan object > ], 
    'user': [ < User: mpowner mpowner > ] 
} { 
    'mp': [ < MpbMealPlan: MpbMealPlan object > , < MpbMealPlan: MpbMealPlan object > ], 
    'user': [ < User: kvermaOwner Owner > ] 
} 

Eine Abfrage: Ist es sogar möglich, Ergebnisse aus den Daten zu erhalten gewünscht Ich habe. Ich möchte es iterieren, um mp und Benutzer zu erhalten, und dann möchte ich mp zu iterieren, um mehrere Datensätze darin zu erhalten. Wie immer, wenn ich versuchte, zu einem Level zu Iterieren, bekomme ich alle Datensätze, so dass die Schlüssel "mp und user" meinen Zweck nicht lösen.

Ich möchte hier keine Zeit verschwenden. Ich habe die Frage aktualisiert. Danke für die Antworten bis jetzt. Update:

Nach der Methode, die ich verwendet, und bekam die gewünschten Ergebnisse:

{% for contributor in contributors.details %} 

    {% for user in contributor.user %} 
     {{ user }} 
     <br> 

     {% for mp in contributor.mp %} 

      {{ mp.mp_name }} 
      <br> 
     {% endfor %} 


    {% endfor %} 

{% endfor %} 

Ergebnisse:

user:mpowner mpowner 
mp:Fresh & Healthy 
mp:evening snacks 
user:kvermaOwner Owner 
mp:Fresh & Healthy 
mp:Energizing 

Endlich Ausgang mit C14L ‚s Hilfe gewünscht Ich habe (Erstaunliche Anleitung). Danke an "ajabdelaziz" und andere auch.

+1

Zeigen Sie uns, was Sie bisher versucht haben – AK47

+1

Ich glaube, diese Frage zu duplizieren http://StackOverflow.com/Questions/8018973/How-to-iterate-through-dictionary-in-a-dictionary-in-django- Vorlage – se0kjun

+0

@ se0kjun Ich habe diese Antwort versucht, aber keine Hilfe. Immer noch falsche Ergebnisse.Wenn jemand wie ich Antworten einfügen kann, bekomme ich nach jeder Schleife eine Bewerbung. – Simer

Antwort

1

Für Python3, ruft .items() Sie die Elemente.

for key, item in data.items(): 

Für Python2 verwenden iteritems():

for k, v in knights.iteritems(): 

In Django Vorlage:

<div> 
    {% for k,v in test.items %} 
    <p>{{ k }} --> {{ v }}</p> 
    {% endfor %} 
</div> 

Docs: https://docs.python.org/3/tutorial/datastructures.html#looping-techniques

Edit:

auf die Antwort hinzuzufügen, um Ihre spezifischen Objekt suchen

[('details', [{ 
    'mp': u '[{"fields": {"status": 

Blick auf diesen Teil: 'mp': u [{ "Felder" ': { "st

Das nicht ist Ein list(), es ist ein String: u''

Wenn Sie eine Zeichenfolge Schleife, erhalten Sie die einzelnen Zeichen, die die Zeichenfolge enthält, nacheinander. Daher das "seltsame" Ergebnis.

Edit 2:

Sowohl contributor.mp und contributor.user Listen enthalten

{% for contributor in contributors.details %} 
    {{ contributor.mp }} 
    {{ contributor.user }} 
{% endfor %} 

so zum Beispiel alle Benutzernamen zu drucken, können Sie

{% for contributor in contributors.details %} 
    {% for user in contributor.user %} 
     {{ user.username }} 
    {% endfor %} 
{% endfor %} 

tun, um die Liste der drucken mp Artikel können Sie

tun
{% for contributor in contributors.details %} 
    {% for mp in contributor.mp %} 
     {{ mp }} 
    {% endfor %} 
{% endfor %} 

Aber jedes mp Objekt hat wahrscheinlich eine Reihe von Attributen. Sie müssen nachsehen, wie Ihre Klassendefinition MpbMealPlan aussieht.

+0

Ich möchte dies tun, ist Django-Vorlage. Wird es auch in der Vorlage funktionieren? – Simer

+1

Ja, das funktioniert auch, ich füge es zur Antwort hinzu – C14L

+0

Danke nochmal. Ich denke das 'u' vor 'mp' war, weil ich serializers.serialize ("json", model.getUserById (contributor_id)) verwendet habe, um Daten für 'mp' zu erhalten. Ich habe meine Frage aktualisiert. Sie helfen wirklich, danke! – Simer

1

Von was ich aufgrund Ihrer Fehler sehe, ist, dass Sie versuchen, über mp zu iterieren, die einen Wert mit Wörterbüchern und Listen in ihnen hat. Wegen der verschiedenen Datentypen können Sie nicht nur .items() verwenden. Sie müssen .items() verwenden, um den mp-Wert in Schlüssel, Wert zu erhalten. dann müssen Sie mit der Iteration über die Liste dann den Schlüssel, Werte wieder beschäftigen. C14L's Antwort zeigt, wie man das in Templates macht, vergiss nicht deine Datentypen!

d.h -

<div> 
    {% for k,v in test.items %} 
     {% for item in v%} 
      {% item %} 
     {% endfor %}  
    {% endfor %} 
    </div> 

Artikel wären die Liste, die Sie über dann laufen können zusätzliche Schlüsselwertepaare zu erhalten.

Eine andere mögliche Lösung ist, das meiste davon in einem Template-Tag-Filter zu tun. und wenden Sie dann den Filter auf die ausgewählte Variable an, die Sie herausfiltern möchten.