Django模板:订购字典项目以供显示

时间:2011-01-01 13:52:38

标签: django django-templates

我正在创建一个显示用户选择的YouTube视频的网站。用户可以为每个视频输入评论。

我想显示(按此顺序):

  1. 用户评论

  2. 视频标题

  3. 我已经创建了视图并创建了以下字典项列表。每个代表一个视频。我把它发送到我的html页面:

    [
        {"my_own_object": vid_obj1, "youtube_obj": obj1} 
        {"my_own_object": vid_obj2, "youtube_obj": obj2}
    ]
    

    “youtube_obj”是youtube提供的对象,其中包含网址,标题,评级等。“my_own_object”包含用户的评论以及其他信息。

    我遍历列表并获得一个词典/视频。没关系。然后我需要显示视频的信息:

    {% for key,value in list.items %}
    
       {% if key = "my_own_object" %}
           <div>
           <p>{{value.user_comment}}</p> 
          </div>  
       {% endif %}  
       {% if key = "youtube_obj" %}
           <div>
           <p> {{value.media.title.text}}</p> 
          </div>  
       {% endif %}                  
    {% endfor %}
    

    这是有效的,除了因为我无法确定字典顺序,我可能最终得到:

    1. 视频标题

    2. 用户评论

    3. 我以为我可以通过分配变量(然后以正确的顺序打印值)来解决这个问题,并且仍然因为我无法分配变量而感到震惊!

      那么,我该如何解决这个问题呢?我可以采取我需要的键/值而不是迭代字典项 - 我试图找到方法来做到这一点,但没有运气。还有其他想法吗? (我需要传递两个视频对象,因为我可能需要更多信息而不是评论和标题,稍后。)

2 个答案:

答案 0 :(得分:1)

您可以直接使用字典键:

{% for item in list %} {# PS: don't use list as a variable name #}
    <p>{{item.my_own_object.user_comment}}</p>
    <p>{{item.youtube_obj.media.title.text}}</p>
{% endfor %}

答案 1 :(得分:0)

只需迭代两次。一次为视频,再次为评论。或者,将它们拆分为自己的字典,然后传递给模板。这可能是一个更好的选择,因为你避免在dict上迭代两次。对于非常小的dicts,这将是没有问题的。对于较大的,它可能是一个问题。