我相信这将是非常基本的。我正在尝试在模板上的字典中显示值的数量。这是我用于模板路由的方法:
# url: localhost/books/home/
def books_home(request):
if request.method == "GET":
first_name = User.objects.get(id=request.session['uid']).first_name
last_name = User.objects.get(id=request.session['uid']).last_name
email = User.objects.get(id=request.session['uid']).email
user_id = User.objects.get(id=request.session['uid']).id
reviews = Review.objects.filter(created_by=request.session['uid']).order_by("-created_at")[:3]
context = {
'first_name' : first_name,
'email' : email,
'last_name' : last_name,
'reviews' : reviews,
}
return render(request, 'html_files/home.html', context=context)
然后在模板中添加相关代码:
<div class="container">
<div class="card">
<h3>Information for {{ first_name }} {{ last_name }}</h3>
<p>email: {{ email }} </p>
<p>Number of reviews: {{ len(reviews) }}</p>
</div>
<div class="card">
<h3>Your recent reviews:</h3>
{% for review in reviews %}
<p>Review for: <a href="/books/book/{{ review.book.id }}/">{{ review.book.title}}</a> by {{ review.book.author.first_name }} {{ review.book.author.last_name }} <br><br>
Your review: {{ review.comments }} <br><br>
Your rating: {{ review.rating }} out of 5</p><br><br><br>
{% endfor %}
</div>
我认为{{ len(reviews }}
可以做到,因为正如您在下面看到的那样,“评论”已成功传递给上下文dict。但是我收到“无法解析余数”错误。感谢您的帮助。
答案 0 :(得分:0)
该教程和文档明确指出Django模板语法不支持带有参数的调用函数。
在这种情况下,您可以使用length
过滤器:
{{ reviews|length }}
或者,由于reviews
是一个查询集(而不是字典),因此您可以调用其count
方法:
{{ reviews.count }}
答案 1 :(得分:0)
首先,您需要考虑您在问题中所写的内容,如下所示:
reviews = Review.objects.filter(created_by=request.session['uid']).order_by("-created_at")[:3]
在查询中使用切片时,最多可以获取前3个值。
在模板中,您可以使用过滤器reviews|length
,如@kartheek的注释中所建议的那样,长度不过是django中默认包含的模板标签,您也可以创建自己的模板标签。
但是对于很少使用的计算,您也可以传递另一个上下文,您的最终上下文字典将如下所示:
context = {
'first_name' : first_name,
'email' : email,
'last_name' : last_name,
'reviews' : reviews,
'total_reviews': len(reviews)
}
注意: 您可能会在下面的参考链接中找到与您的任务有关的有用信息: