IndexError:元组索引超出范围

Posted

技术标签:

【中文标题】IndexError:元组索引超出范围【英文标题】:IndexError: tuple index out of range 【发布时间】:2013-07-28 05:36:21 【问题描述】:

我指的是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"),
)

【问题讨论】:

你能发布你的整个 def get_queryset(self) 吗?另外,我怀疑您已经按照教程进行操作,您是如何访问此视图的? 我猜self.args 是空的。 @limelights 更新了我的问题 您是如何访问它的?您的 args 为空,这就是您收到该错误的原因。 @limelights 我是 python 和 django 的初学者。你会推荐我做什么/读什么? 【参考方案1】:

您正在使用self.args[0] 用于位置参数,但您正在将关键字参数传递给您的视图。

由于您没有位置参数,self.args 是一个长度为零的元组,这就是您得到该异常的原因。

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

【讨论】:

'FieldError at /course/html5/ 无法将关键字'name'解析为字段。选择是:作者、内容、课程名称、id、pub_date、published_course、slug' 这是我现在遇到的错误 这意味着您的Course 对象没有name 字段。你应该使用self.course = get_object_or_404(Course, course_name=self.kwargs.get('slug_topic_name')。另外,当你真正想抛出Http404时,我总是使用self.kwargs.get('&lt;fieldname&gt;')而不是self.kwargs['&lt;fieldname.']来防止IndexError 由于 URL 被映射到视图,没有关键字参数就无法调用视图(除非 OP 决定在代码中的其他位置手动调用它,或者将其映射到另一个 URL 错误)。在任何一种情况下,字典都不会引发IndexError,它们会引发KeyError @BurhanKhalid 谢谢兄弟,它帮助我理清了基本概念以及其他问题。为你干杯! :) @BurhanKhalid 你能告诉我*args在这里有什么用吗?【参考方案2】:

如果你要去这个网址

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

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

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

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

【讨论】:

我正在尝试仅获取该网址

以上是关于IndexError:元组索引超出范围的主要内容,如果未能解决你的问题,请参考以下文章

IndexError:元组索引超出范围以拆分特征和标签

如何在python中修复“IndexError:元组索引超出范围”?

IndexError:运行python 3.9.1时元组索引超出范围

IndexError:使用 py2exe 时元组索引超出范围

一旦尝试适合预处理,train_test_split 训练数据上的“IndexError:元组索引超出范围”

Python:IndexError:列表索引超出范围