为大学生编写应用程序 - 显示部门列表,单击一个部门,然后显示该部门的课程,单击一个部分,然后显示教授该课程的教授。
网址出现问题 - 我的应用会将我重定向到错误的视图。
所以我有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。
知道为什么会这样吗?
答案 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'),
)