【问题标题】:Django class based views with url issue带有 url 问题的基于 Django 类的视图
【发布时间】: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 中使用它。

有什么想法让这个工作正常吗?

非常感谢,

【问题讨论】:

    标签: django django-class-based-views


    【解决方案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 的命名部分是否作为 *args 传递给函数,而不是在渲染模板时传递到上下文中?
    • @puffin,是的,{% url ...%} 期望 url 的名称和需要传递给视图的值(如果在 url 模式中定义)而不是变量名。
    猜你喜欢
    • 2018-03-12
    • 2018-02-20
    • 2011-09-21
    • 2012-01-25
    • 2012-12-28
    • 2011-09-19
    • 2012-01-25
    • 2011-09-18
    • 2013-10-22
    相关资源
    最近更新 更多