2011-09-01 48 views
0

因此,假设我有一个django应用程序需要响应这样的url:http://127.0.0.1:8000/food%20log/4/up/。原始参数是“食物日志”,但当它包含在URL中时,它需要将空间替换为%20。现在链接已被点击,并且它回到了urls.py。如何在django urlpatterns中使用特殊字符

urlpatterns = patterns('', 
(r'^(?P<content_type>\w+)/(?P<object_id>\d+)/(?P<direction>up|down|clear)/$', process_vote), 

... )

因此,看来,它是不能够正确识别参数。这是在想要使用其中包含空格的content_type之前的功能性代码。如果我们现在假设我不能在整个系统的其余部分从content_type的名称中删除空格,那么如何获得urlpatterns函数来识别“food%20log”实际上是“食物日志”,这样它会认识到它是有效的?

基本上我想预处理字符串之前,它是由urlpatterns作用,但我不知道如何/在哪里做到这一点。感谢您的帮助。

回答

1

根据用于re module Python的手册:

当未指定的区域设置和UNICODE标志,匹配任何字母数字字符和下划线;这相当于设置[a-zA-Z0-9_]。使用LOCALE,它将匹配[0-9_]集合以及当前语言环境定义为字母数字的任何字符。如果设置了UNICODE,它将匹配字符[0-9_]以及Unicode字符属性数据库中分类为字母数字的任何字符。

所以,除了\ w之外,也许还要在正则表达式中包含空格。

urlpatterns = patterns('', 
(r'^(?P<content_type>[\w ]+)/(?P<object_id>\d+)/(?P<direction>up|down|clear)/$',  process_vote), 
+0

我正要说一些类似“但这不是一个空间的那一点,它只是%20”,但我认为我会凭经验向自己证明它不会先工作......而且它成功了!我猜想,某处在某个地方知道%20应该是一个空间,并为我做到这一点。谢谢! – rossdavidh