Django URL conf conf重定向到错误的视图

时间:2012-12-07 07:30:10

标签: python django url

为大学生编写应用程序 - 显示部门列表,单击一个部门,然后显示该部门的课程,单击一个部分,然后显示教授该课程的教授。

网址出现问题 - 我的应用会将我重定向到错误的视图。

所以我有3个模特

class Department(models.Model):
    subject         = models.CharField(max_length = 25)
    pub_date        = models.DateTimeField(auto_now_add = True)

    def __unicode__(self):
        return self.subject

class Course(models.Model):
    department      = models.ForeignKey(Department)
    course_number   = models.CharField(max_length = 50)
    course_name     = models.CharField(max_length = 100, blank = True, null = True)
    c_pub_date      = models.DateTimeField(auto_now_add = True)

    def __unicode__(self):
        return self.course_number

class Professor(models.Model):
    course          = models.ForeignKey(Course)
    prof_name       = models.CharField(max_length = 50)
    p_pub_date      = models.DateTimeField(auto_now_add = True)

    def __unicode__(self):
        return self.prof_name

然后我的应用程序URL conf会转到视图,课程和教授,具体取决于URL

urlpatterns = patterns('qanda.views',
    url(r'^$', 'index'),
    url(r'(?P<department_id>\d+)/$', 'courses'),
    url(r'(?P<department_id>\d+)/(?P<course_id>\d+)/$', 'professors'),
)

因此,当我访问url mysite.com时,会列出数据库中的所有部门。然后单击一个部门(即数学),它将带我到mysite.com/1的课程视图,它会显示该部门的所有课程。然后点击课程应该带我去教授们看看mysite.com/1/1,它向我展示了教授该课程的所有教授。

但是,当我进入课程视图并单击课程以获取教授视图时,即使URL显示为mysite.com/1/2,它实际上会将我重定向回mysite.com/2, course_id(在这种情况下,2)并将其误认为departmment_id,并将我重定向到课程视图。

例如,Math 101 course_id = 1.数学102 course_id = 2.对于数学101,有2位教授。教授A教授_id = 1,教授B教授_id = 2。

因此,当点击Math 101时,URL将是mysite.com/1。点击B教授之后,URL将是mysite.com/1/2。但是,现在点击教授B时,URl会显示mysite.com/1/2,但是会把我带到mysite.com/2。

知道为什么会这样吗?

2 个答案:

答案 0 :(得分:5)

你的问题是你的正则表达式太模糊了......你错过了^所以你的第一个网址是匹配的,然后你的第二个网址才有机会。

(\d+)/$将匹配/3/, foo/3/, foo/bar/baz/3

它与尾部斜杠无关。这是一个标准的Django URL模式。 /$

url(r'^$', 'index'),
url(r'(?P<department_id>\d+)/$', 'courses'),
#   ^^^ needs ^
url(r'(?P<department_id>\d+)/(?P<course_id>\d+)/$', 'professors'),

答案 1 :(得分:1)

看起来你有两个问题 - 丢失的插入符号和尾随的斜线。试试这个:

urlpatterns = patterns('qanda.views',
    url(r'^$', 'index'),
    url(r'^(?P<department_id>\d+)/?$', 'courses'),
    url(r'^(?P<department_id>\d+)/(?P<course_id>\d+)/?$', 'professors'),
)