我正试图掌握基于类的视图。
我有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 %}
我正在尝试实现主题的'导航',然后在下面的'subnav'显示上面导航中所选主题的每个类组的标签。
我尝试过不同的方法,例如将Subject.objects.all()作为上下文处理器使用。我还试图将NavListView子类化,这样我就可以继承上一个上下文,使它们在SubNavListView中可用。
目前,我收到NoReverseMatch错误,其中名为'nav'的网址未传递sub_slug,因此我无法在模板的网址中使用它。
关于让这项工作的任何想法?
非常感谢,
答案 0 :(得分: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
,但未在模板上下文中定义,并导致空字符串。因此nav
网址不会获得任何参数。
我在模板中的其他{%url ...%}
标记中看到了类似的问题。