我有一个"主要"通过views.py
中的函数视图查看服务器,该视图设置了很多变量。返回的模板使用了很多这些变量,还包括其中包含的模板以及使用AJAX加载的其他数据。
def season_view(request, id):
# we do a bunch of stuff
return render_to_response('season.html', {groups: groups, date: date, ...}
现在,在此模板中显示匹配列表。有很多匹配,所以使用AJAX分别加载它们,因此重复调用以下基于类的视图来加载匹配:
class GroupedMatches(TemplateView):
template_name = 'partials/grouped_matches.html'
def get_context_data(self, **kwargs):
# stuff...
context['matches'] = grouped_matches
return context
然后grouped_matches.html
循环遍历matches
并包含匹配部分:
{% for match in matches }%
{% include 'partials/match.html' %}
{% endfor %}
这就是事情:匹配部分不仅仅使用匹配本身所拥有的数据,而且还需要(出于任何目的)以前的一些变量,我们设置的groups
season_view
。
问题在于,在不同视图中划分逻辑或使用AJAX似乎会丢失来自season_view
的变量,即使匹配部分包含在" master"图。
为什么这些变量来自"更高"失去了?如何在部分中使用它们而不必再次计算它们?
答案 0 :(得分:1)
调用GroupedMatches
视图时,其上下文需要包含模板中所需的所有内容。如果您season_view()
中还需要GroupedMatches
中的代码,那么您需要提取该特定代码并在两个视图中使用它。
有几种选择:
创建一个高级函数,该函数返回一个字典,该字典将被添加到您需要的任何位置的上下文中。这可行,但可能看起来不像Django。我不会详细说明这个因为我更喜欢继承。见下文。
您还需要将season_view()
更改为某个类,例如覆盖TemplateView
的{{1}}。然后,您可以编写自己的Mixin,它提供get_context_data()
的超级实现,包括所有继承视图共享的所有上下文属性。
get_context_data()