django url中正则表达式的全局变量

时间:2014-04-04 08:15:41

标签: django url

我在url.py中多次使用了一个特定的正则表达式。

有没有办法定义全局参数并使用它而不是重写相同的正则表达式?

例如,而不是:

url(r'^blog/$', 'blog.views.page'),
url(r'^blog/page(?P<num>(option1|option2|option3|option4).*)/$', 'views.page'),
url(r'^blog/comment(?P<num>(option1|option2|option3|option4).*)/$', 'views.comment'),
url(r'^blog/user(?P<num>(option1|option2|option3|option4).*)/$', 'views.user'),

这样:

myregex = "(option1|option2|option3|option4)"

url(r'^blog/$', 'blog.views.page'),
url(r'^blog/page(?P<num>myregex.*)/$', 'views.page'),
url(r'^blog/comment(?P<num>myregex.*)/$', 'views.comment'),
url(r'^blog/user(?P<num>myregex.*)/$', 'views.user'),

1 个答案:

答案 0 :(得分:2)

正则表达式只是字符串。 r'...'语法指示原始字符串(即它仅表示在字符串中不会识别转义和引用构造),它不是特定于正则表达式。您可以通过多种方式撰写字符串:

myregex = r'(option1|option2|option3|option4)'

url(r'^blog/$', 'blog.views.page'),
url(r'^blog/page(?P<num>' + myregex + r'.*)/$', 'views.page'),
url(r'^blog/comment(?P<num>%s.*)/$' % myregex, 'views.comment'),
url(r'^blog/user(?P<num>{options}.*)/$'.format(options=myregex), 'views.user'),