Question

Je suis un gars de PHP lors de mon premier jour en Python, essayant de convertir un site php en python (expérience d’apprentissage), et j’ai mal à obtenir des conseils. Je n'avais jamais pensé qu'il serait si difficile d'utiliser des tableaux ou des dictionnaires multidimensionnels comme vous les appelez pythonistes.

Je peux donc créer des tableaux multidimensionnels à l'aide de this , mais je ne peux pas le mettre en boucle dans un modèle Django. cela ne fonctionne pas, mais j'imagine que je ne peux pas le parcourir en boucle si je pouvais le faire fonctionner.

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

ne semble fonctionner que pour les dictionnaires réels, pas pour les classes de dictionnaire multidimensionnelles custon.

Je crée mon dictionnaire à partir d'une requête 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 ]

J'ai essentiellement besoin que toutes les sociétés soient classées dans une catégorie donnée, puis toutes les vidéos de cette société, afin que je puisse les imbriquer facilement dans mon modèle. C'est comme ça que je l'ai fait en php, créant un énorme tableau profond. Essayer de dupliquer en Python s’est avéré difficile.

Je pensais que je pourrais peut-être faire avec les recherches inversées dans django avec set_MODEL, mais je ne pouvais pas comprendre cela non plus.

Toute aide sur la façon d'atteindre mon objectif serait appréciée. J'espère que ma question est claire

EDIT:

Quand j'ai fini de boucler mon template, ça ressemble à ça ...

<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>
Était-ce utile?

La solution

Vous devriez utiliser ORM intégré au lieu d'utiliser votre propres requêtes (du moins pour quelque chose de simple comme celui-ci), rend les choses beaucoup plus faciles (en supposant que vous avez également construit vos modèles dans votre fichier models.py)

Selon vous:

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

Dans votre modèle:

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

Je ne l’ai pas testé mais ça devrait marcher. Comparez ce code à ce que vous auriez à écrire si vous n’utilisiez pas ORM, en PHP ou en Python.

jetez un coup d’oeil aux django docs pour plus d’informations, je vous conseillerais de prendre quelques heures et de faire le tutoriel .

Mettre à jour: le code a été modifié pour utiliser "_set.all"

.

Autres conseils

Lorsque vous passez d'une langue ou d'un framework à un autre, vous devez comprendre que ce n'est généralement pas une bonne idée d'écrire votre code exactement de la même manière, même si vous le pouvez.

Par exemple:

  

Je crée mon dictionnaire à partir d'une requête SQL

Pourquoi faites-vous cela? La manière de représenter des objets d'une base de données dans Django consiste à utiliser un modèle. Cela prendra beaucoup de choses pour vous, y compris le code SQL, mais vous aidera également à parcourir des tables connexes.

Je suis aussi un débutant de Django ...

Vous devriez pouvoir imbriquer les boucles for pour obtenir quelque chose comme ceci:

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

et ainsi de suite.

Si vous avez construit votre dictionnaire compliqué de la manière suivante:

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., cela aiderait-il? La clé dans ce cas serait un tuple (avec 2 éléments dans les trois premiers cas, 4 éléments dans le quatrième), et je ne suis pas sûr de savoir comment vous voulez le traiter, mais la boucle sur les éléments pour obtenir la clé et la valeur, en soi, devrait bien fonctionner.

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top