2

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 %}

このエラーがあります:

http://dpaste.com/810809/

{% extends "base.html" %} は機能しません。それを削除すると、すべてが機能します。

4

1 に答える 1

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))

他の多くのビューでノードを表示したい場合、これは繰り返されます。すべてのビューにノードを含めたい場合は、リクエスト コンテキスト プロセッサを作成することをお勧めします。すべてのページではなく一部のページに含めたい場合は、カスタム テンプレート タグを作成してみてください。

于 2012-10-07T14:21:14.983 に答える