Django URL模式匹配问题

时间:2011-08-23 19:38:45

标签: regex django

我有一个问题,我似乎无法弄明白。在Django工作试图获得URL匹配的hanlde。我有一个有效。一个没有,我无法弄清楚为什么。希望有人可以提供帮助。

有效的那个:

url(r'^person/device/program/oneday/(?P<meter_id>\d+)/$', 
therm_control.Get_One_Day_Of_Current_Device_Schedule.as_view(), 
name="one-day-url"),

当我使用这个网址时:

http://127.0.0.1:8000/personview/person/device/program/oneday/149778/

没有的人:

url(r'^person/device/program/oneday/(?P<meter_id>\d+)/(?P<day_of_the_week>\s+)/$', 
therm_control.Get_One_Day_Of_Current_Thermostat_Schedule.as_view(), 
name="one-day-url"),

当我使用这个网址时:

http://127.0.0.1:8000/personview/person/device/program/oneday/149778/Monday/

他们认为两种情况都是一样的。为了尝试第二次,我将day_of_the_week添加到def get()

我在调试中看到的是404:

Request Method:     GET
Request URL:    http://127.0.0.1:8000/personview/person/device/program/oneday/149778/Monday/

我在URLconf列表中看到了这一点,所以我知道它在conf:

^personview/ ^person/device/program/oneday/(?P<meter_id>\d+)/(?P<day_of_the_week>\s+)/$ [name='one-day-url'] 

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

问题是\s表示正则表达式中的空白字符,因此在您的URLconf中,星期几必须是一系列空格字符。如果您将\s替换为\w,则会查找单词字符,这就是您想要的。

答案 1 :(得分:1)

\ s +将匹配一个或多个空格,您需要\ w +:

url(r'^person/device/program/oneday/(?P<meter_id>\d+)/(?P<day_of_the_week>\w+)/$', 
    therm_control.Get_One_Day_Of_Current_Thermostat_Schedule.as_view(),
    name="one-day-url"),