2

クラスベースのビューを理解しようとしています。

次のような urls.py があります。

urlpatterns = patterns('homework.views',

(r'^index/$', 'index'),
url(r'^(?P<sub_slug>\w+)/$', NavListView.as_view(), name='nav'),
url(r'^(?P<sub_slug>\w+)/(?P<class_grp_slug>\w+)/$', SubNavListView.as_view(), name='subnav'),

url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
url(r'^admin/', include(admin.site.urls)),)

私は自分のviews.pyを持っています:

# Subject navigation
class NavListView(ListView):
    template_name = 'templates/home.html'

    def get_queryset(self):
        self.subject = Subject.objects.all()
        return self.subject

    def get_context_data(self, **kwargs):
        context = super(NavListView, self).get_context_data(**kwargs)
        context['subjects'] = self.subject
        return context

# Class group navigation
class SubNavListView(NavListView):

    def get_queryset(self):
        self.group = Group.objects.filter(subject__name__iexact=self.kwargs['sub_slug'])
        return self.group

    def get_context_data(self, **kwargs):
        context = super(NavListView, self).get_context_data(**kwargs)
        context['groups'] = self.group
        return context

私の「templates/home.html」には次のものがあります。

{% extends 'templates/base.html' %}
{% load url from future %}

{% block nav-menu-items %}
<ul class="nav">
    {% for sub in subjects %}
    <li class=""><a href="{% url 'nav' sub_slug %}">{{ sub }}</a></li>
    {% endfor %}
    <li class="active"><a href="#">Add Subject</a></li>
</ul>
{% endblock nav-menu-items %}

{% block class_groups_nav %}
<div class="tabbable">
  <ul class="nav nav-tabs">
    {% for group in groups %}
    <li>
      <a data-toggle="tab" href="{% url 'subnav' sub_slug class_grp_slug %}">{{ group }}</a>
    </li>
    {% endfor %}
    <li><a href="#">Add</a></li>
  </ul>
{% endblock class_groups_nav %}

主題の「ナビゲーション」を達成しようとしています。次に、上のナビゲーションで選択された主題の各クラスグループのタブを表示する「サブナビゲーション」を下に表示します。

Subject.objects.all() をコンテキスト プロセッサとして使用できるようにするなど、これを行うさまざまな方法を試しました。また、以前のコンテキストを継承して SubNavListView で使用できるように、NavListView のサブクラス化も試みました。

現時点では、「nav」という名前の URL が sub_slug を渡していないため、テンプレートの URL で使用できない NoReverseMatch エラーが発生しています。

これを機能させることについて何か考えはありますか?

どうもありがとう、

4

1 に答える 1

1

Subjectモデルに名前付きのフィールドがあると仮定するとslug、コードを次のように更新する必要があります。

<li class=""><a href="{% url 'nav' sub.slug %}">{{ sub }}</a></li>

すなわち。に適切なパラメータを渡します{%url ... %}sub.slug参照したい任意のフィールド名に変更します。

したい場合は、することもできます{% url 'nav' sub_slug=sub.slug %}

を渡そうとしていますがsub_slug、これはテンプレート コンテキストで定義されていないため、空の文字列になります。したがって、navurl はパラメーターを取得しません。

{%url ...%}テンプレートの他のタグにも同様の問題があります。

于 2012-11-02T14:40:00.333 に答える