我是第一天在Python-land中的PHP人,尝试将php网站转换为python(学习经验),我很伤心。我从没想过像pythoners所说的那样使用多维数组或字典会很难。

所以我可以使用这个,但我无法在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中创建它的方法,创建了一个巨大的深度数组。试图在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>
有帮助吗?

解决方案

你应该使用内置的 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文档了解更多信息,我建议花几个小时做教程

更新:修改了代码以使用“_set.all”

其他提示

当从一种语言或框架转移到另一种语言或框架时,您需要意识到以完全相同的方式编写代码通常不是一个好主意,即使可以。

例如:

  

我正在从SQL查询创建我的字典

你为什么要这样做?在Django中表示数据库中对象的方法是使用模型。这将为您处理很多事情,包括SQL,但也有助于迭代相关的表。

我也是Django初学者......

你应该能够嵌套for循环来获得这样的东西:

{% 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 ]
等等,会有帮助吗?在这种情况下,关键是一个元组(在前三个案例中有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