在Django中将上下文从子模板传递给父模板
Posted
技术标签:
【中文标题】在Django中将上下文从子模板传递给父模板【英文标题】:Passing context from child to parent template in Django 【发布时间】:2016-06-29 02:34:21 【问题描述】:如何将子模板上使用的上下文传递给它继承自的父模板?
例子:
在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)
在作者.html中
% extends 'base.html' %
在base.html中
% for book in books %
<ul>
<li> book.title </li>
<li> book.year_published </li>
</ul>
% endfor %
这是用于父模板('base.html')内的导航栏。它会根据您所在的作者页面而变化。
【问题讨论】:
上下文中的变量应该已经在base.html
中可用。你不需要做任何事情。
他们不是。例如,当我尝试打印 base.html 中的 book.title 时,什么也没有发生。
您是否尝试过在您的视图中打印书籍?
是的,我有。它无法识别变量。
你能加入views.py
代码吗?
【参考方案1】:
为child.html
中的书籍创建一个新块。 child.html 上的这个 bookblock
应该覆盖存在于 base.html
中的 bookblock
% 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 %
【讨论】:
这是否意味着每当我必须创建基于上下文的导航栏时,我都必须添加一个单独的块?我的意思是,如果导航栏有两个上下文下拉菜单——一个用于书籍,一个用于评论——我必须为评论添加一个新块? 这种方法会得到所需的结果,但在代码维护方面并不理想,因为您必须在需要出现导航的每个 html 页面中重复此块。以上是关于在Django中将上下文从子模板传递给父模板的主要内容,如果未能解决你的问题,请参考以下文章