Pergunta

Eu sou um cara PHP no meu primeiro dia em Python-terra, tentando converter um site php para python (experiência de aprendizagem), e eu estou sofrendo por conselhos. Eu nunca pensei que seria tão difícil de usar arrays ou dicionários multi-dimensionais como você pythoners chamá-los.

Para que eu possa criar matrizes multi-dimensionais usando este , mas não posso loop-lo em um modelo de Django. isso não funciona mas eu imagino que eu circuito não pode por ela se eu poderia fazê-lo funcionar.

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

só funciona para dicionários reais que parece, não o custon aulas dicionário multi-dimensionais.

Estou criando meu dicionário a partir de uma consulta 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 ]

Basicamente, eu preciso para obter todas as empresas em uma determinada categoria e, em seguida, obter todos os vídeos em que a empresa para que eu possa ninho los facilmente no meu modelo. Isto é como eu fiz isso em php, criando uma gama profunda enorme. Tentando duplicar em Python tem sido difícil.

Eu pensei que talvez eu poderia fazer com as pesquisas para trás no Django usando set_MODEL mas eu não poderia descobrir isso também.

Qualquer ajuda sobre como realizar meu objetivo seria apreciada. Espero que a minha pergunta é clara

EDIT:

Quando im feito looping no meu modelo que se parece com isso ...

<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>
Foi útil?

Solução

Você deve estar usando o construído em ORM em vez de usar o seu consultas próprios (pelo menos para simples algo assim), torna as coisas muito mais fácil (supondo que você também já construiu seus modelos em seu arquivo models.py)

Na sua opinião:

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

No seu modelo:

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

Eu não testei, mas ele deve funcionar. Compare este código para o que você teria que escrever se você não estivesse usando ORM, em PHP ou Python.

dar uma olhada nos docs Django para mais informações, eu recomendo tomar algumas horas e fazer o tutorial .

Update: modificou o código para uso "_set.all"

Outras dicas

Ao passar de um idioma ou quadro para outro, é preciso perceber que não é geralmente uma boa idéia para escrever seu código em exatamente da mesma maneira, mesmo se você puder.

Por exemplo:

Estou criando meu dicionário a partir de uma consulta SQL

Por que você está fazendo isso? A forma de representar objetos de um banco de dados em Django é usar um modelo. Que vai cuidar de um monte de coisas para você, incluindo o SQL, mas também irá ajudar com iteração através tabelas relacionadas.

Eu também sou um Django iniciante ...

Você deve ser capaz de ninho para loops para obter algo como isto:

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

e assim por diante.

Se você construiu seu dicionário complicada da seguinte maneira:

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, faria isso ajuda? A chave neste caso seria uma tupla (com 2 itens nos três primeiros casos, 4 itens no quarto), e eu não sei como você significa para tratá-lo, mas o loop nos itens para obter a chave e valor, por si só, deve funcionar bem.

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top