【问题标题】:Django template: Ordering dictionary items for displayDjango 模板:为显示排序字典项
【发布时间】:2011-01-01 13:52:37
【问题描述】:

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

我要显示(按此顺序):

  1. 用户评论

  2. 视频标题

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

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

“youtube_obj”是youtube提供的对象,包含url、title、评分等。“my_own_object”包含用户的cmets等信息。

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

{% 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. 用户评论

我认为我可以通过分配变量(然后以正确的顺序打印值)来解决这个问题,但我仍然对我无法分配变量的事实感到震惊!

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

【问题讨论】:

    标签: django django-templates


    【解决方案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 %}
    

    【讨论】:

    • 谢谢!这完全是我所需要的。我已经重命名了列表:)
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-06
      • 2014-01-24
      • 1970-01-01
      • 2014-11-21
      • 1970-01-01
      • 2014-01-23
      • 2016-05-26
      相关资源
      最近更新 更多