在Django中将上下文从子模板传递到父模板

时间:2016-03-14 06:39:55

标签: python django django-templates django-views

如何将子模板上使用的上下文传递给它继承的父模板?

示例:

在views.py中

def author(request, code):
    author = get_object_or_404(Author, code=code)
    books = Book.objects.filter(author_id=author.id)
    reviews = Review.objects.filter(author_id=author)

    return render(request, 'foo/author.html', {'author': author, 'books': books, 'reviews': reviews})
在author.html中

{% extends 'base.html' %}
base.html中的

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

这是针对父模板('base.html')内的导航栏。它会根据您所在的作者页面而变化。

1 个答案:

答案 0 :(得分:0)

child.html中为图书创建新版块。 child.html上的bookblock应该覆盖bookblock

中存在的base.html
{% bookblock %}
{% for book in books %}
    <ul>
        <li>{{ book.title }}</li>
        <li>{{ book.year_published }}</li>
    </ul>
{% endfor %} 
{% endblock %}

base.html

将与book相关的代码放在基本和子模板上块名称必须相同的块中。

{% bookblock %}
{% for book in books %}
    <ul>
        <li>{{ book.title }}</li>
        <li>{{ book.year_published }}</li>
    </ul>
{% endfor %} 
{% endblock %}