假设我有一个对象'用户'作为上下文进入,我知道它包含许多用户对象。现在,在我的模板中,我想访问一个我知道具有特定属性值的特定用户(假设id为10),然后显示与该用户关联的另一个属性。我知道我能做到:
{% for user in users %}
{% if user.id == 10 %}
{{ user.age }}
{% endif %}
{% endfor %}
我知道我可以在我的视图中提取该用户并仅传递一个对象(?)但在这种情况下,拥有所有这些对象是有意义的。
我觉得应该有一个更简单的方法来做到这一点,但我是一个Django /模板新手。尝试搜索,但不知道如何说出它..
答案 0 :(得分:3)
这实际上是模板标签的工作
...
@register.filter
def where_id(users,user_id):
return filter(lambda u:u.pk==user_id,users)
...
{%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