为大学生写一个应用程序 - 显示一个部门列表,你点击一个,然后它会显示该部门的课程,点击一个,然后显示教授该课程的教授.
遇到网址问题 - 我的应用程序会将我重定向到错误的视图.
所以我有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
Run Code Online (Sandbox Code Playgroud)
然后我的应用程序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'),
)
Run Code Online (Sandbox Code Playgroud)
因此,当我访问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.
知道为什么会这样吗?
你的问题是你的正则表达式太模糊了......你错过了^所以你的第一个网址是匹配的,然后你的第二个网页才有机会.
(\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'),
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1624 次 |
| 最近记录: |