从模板中的相关对象获取有限的随机项?

时间:2012-12-25 07:36:52

标签: python django

我有一个作者模型,每个都分配了许多书。在我的图书模型中,我有:author = models.ForeignKey(Author)

在我的页面中,我列出了我拥有的所有作者以及每位作者希望展示5本随机书籍的作者。

仅通过模板是否可行,或者我必须在我看来这样做? 我的意思是限制结果并随机获取结果。

我目前只将作者传递给模板,如下所示:a = Author.objects.all()

请告知。

1 个答案:

答案 0 :(得分:4)

您有两种选择:

  1. 在您看来这样做:

    此查询“为作者a返回5本随机图书”

    random_books = Book.objects.filter(author=a).order_by('?')[:5]
    
  2. 创建一个custom tag,其中包含作者并随机返回5本书:

    创建自定义标记:

    from myapp.models import Book
    
    def randbooks(author):
        return {'books': Book.objects.filter(author=author).order_by('?')[:5]}
    
    register.inclusion_tag('book_listing.html')(randbooks)
    

    创建模板以显示标题(book_listing.html):

    <ul>
    {% for book in books %}
       <li>{{ book }}</li>
    {% endfor %}
    </ul>
    

    在模板中使用它,如下所示:

    {% for author in a %}
      {% randbooks author %}
    {% endfor %}