2013-07-28 45 views
1

我指的是django documentation的這個頁面來編寫視圖。有人能解釋我做錯了什麼嗎?有什麼能解決IndexError:元組索引超出範圍

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"), 
) 
+1

你可以發佈你的整個def get_queryset(self)嗎?同樣,因爲我懷疑你已經遵循了教程,你如何訪問這個視圖? –

+0

我猜'self.args'是空的。 – iMom0

+0

@limelights更新了我的問題 – user2539745

回答

4

您正在使用self.args[0]這是位置參數,但你傳遞一個關鍵字參數到您的視圖。

因爲你沒有位置參數self.args是一個零長度的元組,這就是你得到這個異常的原因。

由於您的網址中有關鍵字參數,因此您應該使用self.kwargs['slug_topic_name']

+0

'FieldError at/course/html5/ 無法將關鍵字'名稱'解析爲字段。選擇是:author,content,course_name,id,pub_date,published_course,slug'這是我現在得到的錯誤 – user2539745

+0

這意味着你的'Course'對象沒有字段'name'。你應該使用'self.course = get_object_or_404(Course,course_name = self.kwargs.get('slug_topic_name')'。另外,我總是使用'self.kwargs.get('')'代替'self.kwargs [' knbk

+0

由於URL被映射到視圖,所以沒有關鍵字參數就不會調用視圖(除非,OP決定在代碼中的其他地方手動調用它,或者將它映射到另一個URL)。無論哪種情況,字典不會引發'IndexError',它們引發'KeyError'。 –

0

如果你要這個網址

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

沒有self.args,你應該檢查它

我想,它會工作,如果你會去這個網址

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

我正在嘗試僅使用該網址 – user2539745