我是第一天在Python-land中的PHP人,尝试将php网站转换为python(学习经验),我很伤心。我从没想过像pythoners所说的那样使用多维数组或字典会很难。
所以我可以使用this创建多维数组,但我不能在django模板中循环它。 this无法正常工作,但我想如果能让它工作,我就无法循环使用它。
{% 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中创建它的方法,创建了一个巨大的深度数组。试图在Python中复制已经证明是困难的。
我想也许我可以使用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>
答案 0 :(得分:3)
你应该使用内置的ORM而不是使用你自己的查询(至少对于像这样的简单事情),让事情变得更容易(假设你还在models.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文档以获取更多信息,我建议您花几个小时来完成tutorial。
更新:修改了代码以使用“_set.all”
答案 1 :(得分:2)
当从一种语言或框架转移到另一种语言或框架时,你需要意识到以完全相同的方式编写代码并不是一个好主意,即使你可以这样做。
例如:
我正在从SQL查询创建我的字典
你为什么要这样做?在Django中表示数据库中对象的方法是使用模型。这将为您处理很多事情,包括SQL,但也有助于迭代相关的表。
答案 2 :(得分:0)
我也是Django初学者......
你应该能够嵌套for循环来获得这样的东西:
{% for key,val in dictionary.items %}
{% for key,val in val.items %}
等等。
答案 3 :(得分:0)
如果您按以下方式构建复杂字典:
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 ]
等等,会有帮助吗?在这种情况下,关键是一个元组(在前三个案例中有2个项目,在第四个案例中有4个项目),我不确定你是如何对待它的,但是要获得关键和值的项目循环,本身,应该工作正常。
答案 4 :(得分:0)
{% 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 %}
{% 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 %}