在base.html中:
<div id="menu_shop">
<input name="search" placeholder="search">
<p>Category:</p>
{% load mptt_tags %}
<ul class="root">
{% recursetree nodes %}
<li>
{{ node.name }}
{% if not node.is_leaf_node %}
<ul class="children">
{{ children }}
</ul>
{% endif %}
</li>
{% endrecursetree %}
</ul>
</div>
在观点中:
def show_category_tree(request):
return render_to_response("base.html",
{'nodes': Category.tree.all()},
context_instance=RequestContext(request))
urls.py:
url(r'^category/', 'item.views.show_category_tree'),
url(r'^category/(?P<slug>[\w\-_]+)/$', 'item.views.by_category'),
如何在“by_category.html”
中显示如果我尝试(例如):
{% extends "base.html" %}
{% block content %}
{% for e in entries %}
<p><b>{{ e.name}}</b></p>
<p>{{ e.desc}}</p>
{% endfor %}
{% endblock %}
我有这个错误:
{%extends“base.html”%}不起作用。如果我删除它,一切正常。
答案 0 :(得分:1)
您看到此错误,因为by_category
的模板上下文不包含nodes
。
extends
标记与模板有关,而与视图无关。它使您的by_category.html
模板扩展了base.html
模板,但它不包含任何其他视图中的模板上下文。
最简单的解决方法是将nodes
添加到by_category
视图中的模板上下文中。
def by_category(request, slug):
entries = Entry.objects.filter(...)
return render_to_response("base.html",
{'entries': entries,
'nodes': Category.tree.all()},
context_instance=RequestContext(request))
如果要在许多其他视图中显示节点,这将是重复的。如果要在所有视图中包含节点,可能需要编写请求上下文处理器。如果要将其包含在某些页面中,而不是所有页面中,请尝试编写自定义模板标记。