我无法在html中显示该值。 我在views.py中写道
def score_test(request):
results = TestScore.objects.filter(user=request.user).all()
print(results)
return render(request, 'score_test.html',{'results': results})
<div class="col-xs-12">
<h2 class="result_title">Test Score</h2>
<h3>Your score is
{% for result in results.all %}
{% if result.score > 95 %}
<h4 class="one"> {{ result.score }} </h4>
{% else %}
{% if result.score > 80 %}
<h4 class="two"> {{ result.score }} </h4>
{% else %}
{% if result.score > 60 %}
<h4 class="three"> {{ result.score }} </h4>
{% else %}
{% if result.score > 40 %}
<h4 class="four"> {{ result.score }} </h4>
{% else %}
<h4 class="five"> {{ result.score }} </h4>
{% endif %}
{% endif %}
{% endif %}
{% endif %}
{% endfor %}
</h3>
</div>
在models.py
中class TestScore(models.Model):
score = models.FloatField(null=True, blank=True, default=None)
在views.py的print(结果)中,我得到了<function tc at 0x105a15d70>
,所以我想我可以在结果中获得TestScore模型的分数。那么,我该如何解决这个问题呢?在score_test.html的模板中写if-else语句我错了吗?
答案 0 :(得分:1)
“函数tc在0x105a15d70”绝对不是TestCore.objects.filter()
应返回的内容(它应该是一个查询集),当然不是你发布的代码可以产生的内容,所以毫不奇怪你没有看到任何内容模板。
据说,您的代码可能会有一些改进......
首先,在您看来:
results = TestScore.objects.filter(user=request.user).all()
.all()
是多余的。你只需要:
results = TestScore.objects.filter(user=request.user)
您甚至可以使用反向关系(假设您未在related_name
字段中指定TestScore.user
):
results = request.user.testscore_set.all()
然后在你的模板中:
{% for result in results.all %}
“。all”再次无用,可能(或不是)导致您的问题。但是,它没用,所以不要使用它;)
{% for result in results %}
然后你可以使用{% elif <condition> %} instead of nested
{%else%} {%if%}`:
{% if result.score > 95 %}
<h4 class="one"> {{ result.score }} </h4>
{% elif result.score > 80 %}
<h4 class="two"> {{ result.score }} </h4>
{% elif result.score > 60 %}
<h4 class="three"> {{ result.score }} </h4>
{% elif result.score > 40 %}
<h4 class="four"> {{ result.score }} </h4>
{% else %}
<h4 class="five"> {{ result.score }} </h4>
{% endif %}
但使用custom template filter会使您的代码更简单:
# <yourapp>/templatetags/<yourlibname>.py
from django import template
register = template.Library()
@register.filter
def score_grade(score):
try:
score = int(score)
except (TypeError, ValueError):
# XXX should at least log the exception
return ""
if score > 95:
return "one"
elif score > 80:
return "two"
elif score > 60:
return "three"
elif score > 40:
return "four"
else:
return "five"
并在您的模板中:
{% load <yourlibname> %}
{% for result in results %}
<h4 class="{{ result.score|score_grade }}"> {{ result.score }} </h4>
{% endfor %}
答案 1 :(得分:0)
您可以使用elif命令。
{% if result.score > 95 %}
<h4 class="one"> {{ result.score }} </h4>
{% elif result.score > 80 %}
<h4 class="two"> {{ result.score }} </h4>
...
{% else %}
<h4 class="five"> {{ result.score }} </h4>
{% endif %}