带有 url 问题的基于 Django 类的视图
Posted
技术标签:
【中文标题】带有 url 问题的基于 Django 类的视图【英文标题】:Django class based views with url issue 【发布时间】:2012-10-23 04:27:15 【问题描述】:我正在尝试掌握基于类的视图。
我的 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)),)
我有我的意见.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() 用作上下文处理器。我还尝试对 NavListView 进行子类化,以便可以继承以前的上下文,使它们在 SubNavListView 中可用。
目前,我收到一个 NoReverseMatch 错误,其中名为“nav”的 url 没有传递 sub_slug,因此我无法在模板的 url 中使用它。
有什么想法让这个工作正常吗?
非常感谢,
【问题讨论】:
【参考方案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 不会得到任何参数。
我在模板中的其他 %url ...%
标记中看到了类似的问题。
【讨论】:
感谢您的回答。那么,URL% url ...%
期望 url 的名称和需要传递给视图的值(如果在 url 模式中定义)而不是变量名。以上是关于带有 url 问题的基于 Django 类的视图的主要内容,如果未能解决你的问题,请参考以下文章