2013-05-30 106 views
3

我想通过使用正则表达式从URL到视图的两个输入。拆分URL与正则表达式

我urls.py线看起来像这样

(r'^blog/(?P<match>.+)/', 'blog.views.blog'), 

,这是我的看法

def blog(request, match): 
    pieces = match.split('/') 

但是,如果我的网址是 “root.com/blog/user/3” 只pieces返回[user]

为了pieces to return [用户],[3]`尾部斜杠已被添加到我的URL:“root.com/blog/user/3/”

而且据我所知,并根据我的Python shell,第一个URL应该已经返回[user],[3]

我错过了什么吗?或者,Django是否实际上将字符串与Python分开?

+0

你想'user'和'3'作为视图中的2个独立变量吗? – karthikr

+0

这似乎不是一个很好的理念,实际上,以这种方式得到论点。你确定你真的想这么做吗? – kirelagin

+0

@karthikr是的,我有用户=件[0]和数量=件[1],但是,与第一个网址,我得到一个错误,因为件列表超出范围。 – bcoop713

回答

3

问题是您的正则表达式与整个网址不匹配,因为该模式以斜线结尾,而您的网址没有。

但由于正则表达式结尾没有明确的$匹配一个字符串的前缀,如果你看看你的match变量,你会发现它是user/,不user/3正如您所料。

更新:(更详细的解释)

r'^blog/.*/'匹配[blog/user/][blog/user/]3(用来表示实际匹配的零件方括号中)。

如果您尝试r'^blog/.*/$'您会注意到blog/user/3根本不匹配,因为最后没有斜线。

+2

大家都知道,我忘记了美元符号,解决方案是(r'^ blog /(?P 。+)/ $','blog.views.blog'),以上是对它的解释没有工作:) – bcoop713