1

为大学生写一个应用程序——显示一个系列表,你点击一个,然后它会显示那个系的课程,点击一个,然后显示教授那个课程的教授。

URL conf 有问题——我的应用程序不断将我重定向到错误的视图。

所以我有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) 并将其误认为是部门 ID,并将我重定向到课程视图。

例如,Math 101 course_id = 1。Math 102 course_id = 2。对于 Math 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。

知道为什么会这样吗?

4

2 回答 2

5

你的问题是你的正则表达式太模糊了..你错过了^所以你的第一个 URL 在你的第二个有机会之前匹配。

(\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'),
于 2012-12-07T07:38:51.237 回答
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'),
)
于 2012-12-07T07:34:07.170 回答