Django模板:有没有办法根据属性查询特定对象(而不是遍历所有对象)?

时间:2014-01-17 00:04:13

标签: python django templates

假设我有一个对象'用户'作为上下文进入,我知道它包含许多用户对象。现在,在我的模板中,我想访问一个我知道具有特定属性值的特定用户(假设id为10),然后显示与该用户关联的另一个属性。我知道我能做到:

{% for user in users %}
    {% if user.id == 10 %}
        {{ user.age }}
    {% endif %}
{% endfor %}

我知道我可以在我的视图中提取该用户并仅传递一个对象(?)但在这种情况下,拥有所有这些对象是有意义的。

我觉得应该有一个更简单的方法来做到这一点,但我是一个Django /模板新手。尝试搜索,但不知道如何说出它..

2 个答案:

答案 0 :(得分:3)

这实际上是模板标签的工作

templatetags / my_tags.py

...
@register.filter
def where_id(users,user_id):
    return filter(lambda u:u.pk==user_id,users)
...

sometemplate.html

{%load my_tags %}
...
{% for user in users|where_id:10 %}
....

答案 1 :(得分:0)

如果您使用的是唯一字段,最好使用get,而不是filter。这是一种通用的方法,受到Joran的回答和this answer的启发。

<强> my_template.html:

{%load my_tags %}
...
This is the user with pk=1: {{ users|get:"pk, 1" }}
....

<强> templatetags / my_tags.py:

from django.template import Library
from django.core.exceptions import ObjectDoesNotExist

register = Library()

@register.filter
def get(models, argstring):
    args = argstring.split(',')
    if len(args) != 2:
        raise ValueError("Exactly two arguments required, separated by comma")
    field, value = args
    try:
        return models.get(**{field: value})
    except ObjectDoesNotExist:
        return None