문제

나는 Python-Land에서 첫날 PHP 사람으로 PHP 사이트를 Python (학습 경험)으로 변환하려고 노력하고 있으며 조언을 받고 있습니다. 파이터너가 전화를 걸 때 다차원 배열이나 사전을 사용하는 것이 너무 어려울 것이라고 생각하지 않았습니다.

따라서 다차원 배열을 사용하여 만들 수 있습니다 이것, 그러나 나는 django 템플릿에서 그것을 반복 할 수 없습니다. 이것 작동하지 않지만 작동하게 할 수 있다면 반복 할 수 없다고 생각합니다.

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

Custon 다차원 사전 클래스가 아닌 실제 사전에만 적용됩니다.

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 ]

기본적으로 모든 회사를 특정 카테고리로 가져 와서 해당 회사의 모든 비디오를 가져와 템플릿에서 쉽게 둥지를 틀어야합니다. 이것이 내가 PHP에서 한 방식으로 하나의 거대한 깊은 배열을 만듭니다. 파이썬에서 복제하려고하는 것은 어려운 것으로 입증되었습니다.

나는 set_model을 사용하여 django의 거꾸로 조회를 할 수 있다고 생각했지만 나는 그것을 알 수 없었습니다.

내 목표를 달성하는 방법에 대한 도움은 감사 할 것입니다. 내 질문이 분명하기를 바랍니다

편집하다:

내 템플릿에서 반복을 완료하면 이렇게 보인다 ...

<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>
도움이 되었습니까?

해결책

내장을 사용해야합니다 ORM 자신의 쿼리를 사용하는 대신 (적어도 이와 같은 간단한 것을 위해), 모델을 훨씬 쉽게 만들 수 있습니다 (모델 .py 파일에 모델을 빌드했다고 가정).

당신의 견해로 :

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

템플릿에서 :

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

나는 그것을 테스트하지 않았지만 작동해야합니다. PHP 또는 Python에서 ORM을 사용하지 않았다면이 코드를 작성해야 할 내용과 비교하십시오.

더 많은 정보를 얻으려면 Django 문서를 살펴보십시오. 몇 시간을 걸고 지도 시간.

업데이트: "_set.all"을 사용하도록 코드를 수정했습니다.

다른 팁

한 언어 나 프레임 워크로 이동할 때는 가능하더라도 코드를 정확히 같은 방식으로 작성하는 것이 일반적으로 좋은 생각이 아니라는 것을 알아야합니다.

예를 들어:

SQL 쿼리에서 사전을 만들고 있습니다

왜 이런 짓을하는? Django의 데이터베이스에서 객체를 표현하는 방법은 모델을 사용하는 것입니다. 그것은 SQL을 포함하여 많은 것들을 처리하지만 관련 테이블을 통한 반복에 도움이 될 것입니다.

나는 또한 django 초보자입니다 ...

당신은 다음과 같은 것을 얻기 위해 루프를 중첩 할 수 있어야합니다.

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

등등.

복잡한 사전을 다음과 같이 구축 한 경우 :

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 ]

등, 그게 도움이 될까요? 이 경우 핵심은 튜플입니다 (처음 3 건의 경우 2 개의 항목이 있는데, 네 번째에는 4 개의 항목이 있습니다), 나는 당신이 그것을 처리한다는 것을 어떻게 의미하는지 잘 모르겠지만 키와 가치를 얻기 위해 항목의 루프입니다. 그 자체는 잘 작동해야합니다.

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top