장고에서 다차원 사전을 가로 지르고 있습니다
-
06-07-2019 - |
문제
나는 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 %}