【问题标题】:Django Templates First element of a ListDjango 模板列表的第一个元素
【发布时间】:2011-05-16 05:55:59
【问题描述】:

我将字典传递给我的 Django 模板,

字典和模板是这样的 -

lists[listid] = {'name': l.listname, 'docs': l.userdocs.order_by('-id')}

{% for k, v in lists.items %}
    <ul><li>Count: {{ v.docs.count }}, First: {{ v.docs|first }}</li></ul>
{% endfor %}

现在docsuserdocs 类型的列表。即是一个实例。所以first 过滤器返回给我这个实例。我需要从中提取它的id。我该怎么做?

我试过了 {{ v.docs|first }}.id 和其他各种徒劳的试验。

【问题讨论】:

    标签: python django django-templates django-filters


    【解决方案1】:

    你可以试试这个:

    {{ v.docs.0 }}
    

    点赞arr.0

    您可以通过索引(012 等)获取元素。

    【讨论】:

    • 感谢您的一般回答。我需要第一个和第二个;)
    【解决方案2】:

    您可以使用{% with %} 模板标签来处理这类事情。

    {% with v.docs|first as first_doc %}{{ first_doc.id }}{% endwith %}
    

    【讨论】:

    • 四处乱窜并找到了替代品,告诉我这是不是不好的做法 - {{ v.movies.0.doc.id }}
    【解决方案3】:

    不知道有没有用。。

    您想要的是可迭代对象 (v.docs) 的第一个值,并且您正在迭代另一个封装可迭代对象 (列表)。

    对于计数,我也会这样做,但对于第一个元素.. 我会单独遍历 v.docs 并通过检索第一个值 一个内循环。

    {% for doc in v.docs %}
        {% if v.docs | first %}  
        <li>doc</li>
        {% endif %}
    {% endfor %}
    

    注意:第一个过滤器应用于 v.docs ,而不是 doc。 是的。它涉及另一个循环:(

    【讨论】:

    • 您必须将v.docs | first 更改为v.docs|first,因为您收到此错误:Could not parse the remainder: '|' from '|'
    猜你喜欢
    • 2016-05-01
    • 2013-01-29
    • 1970-01-01
    • 2019-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-22
    • 1970-01-01
    相关资源
    最近更新 更多