Django Templates List的第一个元素

Sri*_*aju 23 python django django-templates django-filters

我将字典传递给我的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 %}
Run Code Online (Sandbox Code Playgroud)

现在docs是一个userdocs类型列表.即是一个实例.所以first过滤器会返回此实例.从这里我需要提取它id.我怎么做?

我尝试了 {{ v.docs|first }}.id各种其他无用的试验.

Dan*_*man 53

您可以使用{% with %}templatetag进行此类操作.

{% with v.docs|first as first_doc %}{{ first_doc.id }}{% endwith %}
Run Code Online (Sandbox Code Playgroud)

  • 被黑客攻击并找到一个替代品,告诉我这是不是一种不好的做法 - "{{v.movi​​es.0.doc.id}}" (9认同)

Abd*_*eed 38

你可以试试这个:

{{ v.docs.0 }}
Run Code Online (Sandbox Code Playgroud)

喜欢 arr.0

你可以通过索引元素(0,1,2等).

  • 谢谢你的通用答案。我需要第一个和第二个 ;) (2认同)

小智 5

我不知道这是否有用..

你想要的是iterable(v.docs)的第一个值,你正在迭代另一个封装的iterable(列表).

对于计数,我会做同样的事情,但对于第一个元素..我将单独遍历v.doc并通过内部循环检索第一个值.

{% for doc in v.docs %}
    {% if v.docs | first %}  
    <li>doc</li>
    {% endif %}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

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

  • 您必须更改``v.docs | first``` 到 ```v.docs|first``` 因为你收到此错误:```无法解析其余部分:'|' 来自“|” ```` (2认同)