我有以下代码,我会收到所有问题说明。
{% for n in task.task_notes.all %}
{% if n.is_problem %}
<li>{{ n }}</li>
{% endif %}
{% endfor %}
我仅如何获得第一个问题提示?有没有办法在模板中做到这一点?
答案 0 :(得分:4)
在视图中:
context["problem_tasks"] = Task.objects.filter(is_problem=True)
# render template with the context
在模板中:
{{ problem_tasks|first }}
first
模板过滤器reference。
如果您根本不需要其他问题任务(从第二个到最后一个),那会更好:
context["first_problem_task"] = Task.objects.filter(is_problem=True)[0]
# render template with the context
模板:
{{ first_problem_task }}
答案 1 :(得分:1)
假设您需要模板中的所有其他任务。
您可以制作可重复使用的custom filter(请查看first
过滤器implementation btw):
@register.filter(is_safe=False)
def first_problem(value):
return next(x for x in value if x.is_problem)
然后,以这种方式在模板中使用它:
{% with task.task_notes.all|first_problem as problem %}
<li>{{ problem }}</li>
{% endwith %}
希望有所帮助。
答案 2 :(得分:0)
在循环中使用此代码:
{% if forloop.counter == 1 %}{{ n }}{% endif %}