IndexError:元组索引超出范围

时间:2013-07-28 09:44:16

标签: django postgresql django-models django-views

我指的是django documentation的这个页面来编写视图。谁能解释我做错了什么?什么可能是解决方案

    self.object_list = self.get_queryset()
  File "/vagrant/projects/kodeworms/course/views.py", line 23, in get_queryset
    self.Course = get_object_or_404(Course, name=self.args[0])
  IndexError: tuple index out of range

我的views.py文件

# Create your views here.
from django.views.generic import ListView, DetailView
from django.shortcuts import get_object_or_404

from .models import Course, Content


class PublishedCourseMixin(object):
    def get_queryset(self):
        queryset = super(PublishedCourseMixin, self).get_queryset()
        return queryset.filter(published_course=True)


class CourseListView(PublishedCourseMixin, ListView):
    model = Course
    template_name = 'course/course_list.html'

class CourseContentListView(ListView):
    model = Content
    template_name = 'course/content_list.html'

    def get_queryset(self):
        self.Course = get_object_or_404(Course, name=self.args[0])
        return Content.objects.filter(course=self.course, published=True)

我的urls.py文件

from django.conf.urls import patterns, url

from . import views

urlpatterns = patterns('',
    url(r"^$", views.CourseListView.as_view(), name="list" ),
    url(r"^(?P<slug_topic_name>[\w-]+)/$", views.CourseContentListView.as_view(), name="list"),
)

2 个答案:

答案 0 :(得分:4)

您正在使用self.args[0]作为位置参数,但您正在向视图传递关键字参数。

因为你没有位置参数self.args是一个零长度的元组,这就是你得到那个例外的原因。

您应该使用self.kwargs['slug_topic_name'],因为您的网址中有关键字参数。

答案 1 :(得分:0)

如果你要去这个网址

url(r"^$", views.CourseListView.as_view(), name="list" ),

没有self.args,你应该检查一下

我想,如果你要去这个网址,它会起作用

url(r"^(?P<slug_topic_name>[\w-]+)/$", views.CourseContentListView.as_view(), name="list"),