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

时间:2018-08-09 15:39:01

标签: 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)

然后在模板中添加相关代码:

<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。但是我收到“无法解析余数”错误。感谢您的帮助。

2 个答案:

答案 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)
            }

注意: 您可能会在下面的参考链接中找到与您的任务有关的有用信息:

  1. https://docs.djangoproject.com/en/2.1/howto/custom-template-tags/
  2. https://docs.djangoproject.com/en/2.1/ref/templates/builtins/