Django - 在模板中打印字典的长度

gar*_*eth 1 python django

我相信这将是非常基本的。我试图在模板上的字典中显示值的数量。这是我的模板路由方法:

# 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)
Run Code Online (Sandbox Code Playgroud)

然后模板中的相关代码:

<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>
Run Code Online (Sandbox Code Playgroud)

我认为这样{{ len(reviews }}做可以,因为正如您在下面看到的那样,“评论”已成功传递给上下文字典。但我收到“无法解析余数”错误。感谢您的帮助。

Dan*_*man 6

教程和文档明确指出 Django 模板语法不支持使用参数调用函数。

在这种情况下,您可以使用length过滤器:

{{ reviews|length }}
Run Code Online (Sandbox Code Playgroud)

或者,由于reviews是查询集(不是字典),您可以调用它的count方法:

{{ reviews.count }}
Run Code Online (Sandbox Code Playgroud)