Domanda

Sono un ragazzo di PHP il mio primo giorno in Python-land, provando a convertire un sito php in python (esperienza di apprendimento), e sto facendo male per un consiglio. Non avrei mai pensato che sarebbe stato così difficile utilizzare array o dizionari multidimensionali come li chiamano i pitoni.

Così posso creare array multidimensionali usando this , ma non riesco a riprodurlo in loop in un modello django. questo non funziona ma immagino di non poterlo scorrere se riesco a farlo funzionare.

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

sembra funzionare solo con dizionari attuali, non con le classi del dizionario multidimensionale di Custon.

Sto creando il mio dizionario da una query sql:

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 ]

Fondamentalmente ho bisogno di ottenere tutte le aziende in una determinata categoria e quindi ottenere tutti i video in quella società in modo da poterli annidare facilmente nel mio modello. È così che ho fatto in php, creando un enorme array profondo. Cercare di duplicare in Python si è rivelato difficile.

Ho pensato che forse avrei potuto fare con le ricerche all'indietro in Django usando set_MODEL ma non sono riuscito a capirlo neanche.

Qualsiasi aiuto su come raggiungere il mio obiettivo sarebbe apprezzato. Spero che la mia domanda sia chiara

EDIT:

Quando ho finito il looping nel mio modello, sembra così ...

<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>
È stato utile?

Soluzione

Dovresti utilizzare il ORM integrato invece di utilizzare il tuo le proprie query (almeno per qualcosa di semplice come questo), rendono le cose molto più semplici (supponendo che tu abbia anche costruito i tuoi modelli nel tuo file models.py)

A tuo avviso:

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

Nel tuo modello:

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

Non l'ho provato ma dovrebbe funzionare. Confronta questo codice con quello che dovresti scrivere se non stessi usando ORM, in PHP o Python.

dai un'occhiata ai documenti di django per maggiori informazioni, ti consiglio di prendere qualche ora e di fare tutorial .

Aggiornamento: modificato il codice per utilizzare " _set.all "

Altri suggerimenti

Quando si passa da una lingua o un framework a un altro, è necessario rendersi conto che di solito non è una buona idea scrivere il codice esattamente nello stesso modo, anche se è possibile.

Ad esempio:

  

Sto creando il mio dizionario da una query sql

Perché lo stai facendo? Il modo di rappresentare oggetti da un database in Django è usare un modello. Ciò si occuperà di molte cose per te, incluso l'SQL, ma aiuterà anche a scorrere le tabelle correlate.

Sono anche un principiante di Django ...

Dovresti essere in grado di annidare i cicli for per ottenere qualcosa del genere:

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

e così via.

Se hai creato il tuo dizionario complicato nel modo seguente:

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 ]

ecc., sarebbe d'aiuto? La chiave in questo caso sarebbe una tupla (con 2 elementi nei primi tre casi, 4 elementi nel quarto), e non sono sicuro di come intendi trattarlo, ma il ciclo sugli elementi per ottenere chiave e valore, di per sé, dovrebbe funzionare bene.

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top