Frage

Ich bin ein PHP-Kerl an meinem ersten Tag in Python-Land und versuche, eine PHP-Website zu Python (Lernerfahrung) zu konvertieren, und ich verletze um Rat. Ich hätte nie gedacht, dass es so schwer zu verwenden multidimensionale Arrays oder Wörterbücher, wie Sie pythoners sie nennen.

Also ich multidimensionalen Arrays erstellen kann mit diese , aber ich kann es in einer django Vorlage nicht Schleife. dies nicht funktioniert, aber ich glaube, ich Schleife durch sie kann nicht, wenn ich es Arbeit kommen könnte.

{% for key,val in dictionary.items %}

funktioniert nur für tatsächlichen Wörterbücher es, nicht die custon mehrdimensionale Wörterbuch Klassen scheint.

Ich schaffe mein Wörterbuch aus einer SQL-Abfrage:

vid[ video[ 7 ] ][ 'cat_short_name' ] = video[ 2 ]
vid[ video[ 7 ] ][ 'cat_name' ] = video[ 1 ]
vid[ video[ 7 ] ][ 'cat_id' ] = video[ 7 ]

vid[ video[ 7 ] ][ 'companies' ][ video[ 14 ] ][ 'comp_short_name' ] = video[ 5 ]
vid[ video[ 7 ] ][ 'companies' ][ video[ 14 ] ][ 'comp_name' ] = video[ 4 ]
vid[ video[ 7 ] ][ 'companies' ][ video[ 14 ] ][ 'comp_website' ] = video[ 6 ]

vid[ video[ 7 ] ][ 'companies' ][ video[ 14 ] ][ 'videos' ][ video[ 8 ] ][ 'top_video' ] = 0
vid[ video[ 7 ] ][ 'companies' ][ video[ 14 ] ][ 'videos' ][ video[ 8 ] ][ 'vid_id' ] = video[ 8 ]
vid[ video[ 7 ] ][ 'companies' ][ video[ 14 ] ][ 'videos' ][ video[ 8 ] ][ 'vid_name' ] = video[ 9 ]
vid[ video[ 7 ] ][ 'companies' ][ video[ 14 ] ][ 'videos' ][ video[ 8 ] ][ 'vid_url' ] = video[ 10 ]

Ich brauche im Grunde alle Unternehmen in einer bestimmten Kategorie zu bekommen und dann alle Videos in diesem Unternehmen erhalten so kann ich nisten sie leicht in meiner Vorlage. Dies ist, wie ich tat es in php, eine große tiefe Array erstellen. Der Versuch, in Python zu duplizieren hat sich als schwierig erwiesen.

Ich dachte, vielleicht i mit den rückwärts Lookups in django mit set_MODEL tun könnte, aber ich kann, dass entweder nicht herausgefunden.

Jede Hilfe, wie mein Ziel erreichen würde geschätzt. Ich hoffe, meine Frage klar ist,

EDIT:

Wenn im in meiner Vorlage getan Looping sieht es wie folgt ...

<h1>Category</h1>
   <h2>Company</h2>
   <ul>
        <li>video</li>
    </ul>
    <h2>Company</h2>
    <ul>
        <li>video</li>
        <li>video</li>
    </ul>
<h1>Category</h1>
   <h2>Company</h2>
   <ul>
        <li>video</li>
    </ul>
    <h2>Company</h2>
    <ul>
        <li>video</li>
        <li>video</li>
    </ul>
War es hilfreich?

Lösung

Sie sollten die gebaut werden, bei ORM stattdessen Ihre verwenden eigene Abfragen (zumindest für etwas einfaches wie diese), macht die Dinge viel einfacher (Sie unter der Annahme haben auch Ihre Modelle in Ihrer models.py-Datei erstellt)

In Ihrer Ansicht:

def categories_view(request):
    categories = Categories.objects.all()   #maybe put an order_by or filter here
    return render_to_response("your_template.html", {'categories':categories})

In der Vorlage:

{% for category in categories %}
    <h1>{{ category.name }}</h1>
    {% for company in category.company_set.all %}
        <h2>{{ company.name }}</h2>
        <ul>
        {% for video in company.video_set.all %}
            <li>{{ video.name }}</li>
        {% endfor %}
        </ul>
    {% endfor %}
{% endfor %}

Ich habe es nicht getestet, aber es sollte funktionieren. Vergleichen Sie diesen Code zu dem, was Sie haben zu schreiben, wenn Sie nicht ORM verwendet haben, entweder in PHP oder Python.

einen Blick auf die django-Dokumentation für weitere Informationen, würde ich empfehlen, ein paar Stunden zu nehmen und die Tutorial .

Update: modifiziert, um den Code zu verwenden "_set.all"

Andere Tipps

Wenn von einer Sprache oder Rahmen zum anderen bewegen, müssen Sie erkennen, dass es nicht in der Regel eine gute Idee, Ihren Code auf genau die gleiche Art und Weise zu schreiben, auch wenn Sie können.

Zum Beispiel:

  

ich meinen Wörterbuch aus einer SQL-Abfrage erstellen

Warum tun Sie das? Die Möglichkeit, Objekte aus einer Datenbank in Django zu vertreten ist, ein Modell zu verwenden. Das kümmert sich eine ganze Menge Sachen für Sie, einschließlich der SQL, sondern auch mit Iterieren über verbundene Tabellen helfen.

Ich bin auch ein Django Anfänger ...

Es soll möglich sein, zu nisten die für Schleifen, so etwas zu bekommen:

{% for key,val in dictionary.items %}
    {% for key,val in val.items %}

und so weiter.

Wenn Sie Ihr kompliziertes Wörterbuch in folgenden Weise aufgebaut:

vid[ video[ 7 ], 'cat_short_name' ] = video[ 2 ]
vid[ video[ 7 ], 'cat_name' ] = video[ 1 ]
vid[ video[ 7 ], 'cat_id' ] = video[ 7 ]

vid[ video[ 7 ], 'companies', video[ 14 ], 'comp_short_name' ] = video[ 5 ]

etc, würde das helfen? Der Schlüssel in diesem Fall wäre ein Tupel (mit 2 Einträgen in den ersten drei Fällen, 4 Elemente in den vierten), und ich bin mir nicht sicher, wie Sie sie behandeln bedeuten, aber die Schleife auf Artikel Schlüssel und Wert zu erhalten, per se sollte gut funktionieren.

{% for key, val in vid.items %}
    <h1>{{ val.cat_name }}</h1>
    {% for k2, v2 in val.companies.items %}
        <h2>{{ v2.comp_name }}</h2>
        <ul>
        {% for k3, v3 in v2.videos.items %}
            <li>{{ v3.vid_name }}</li>
        {% endfor %}
        </ul>
    {% endfor %}
{% endfor %}

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top