2014-04-04 49 views
2

我在url.py中多次使用了一個特殊的正則表達式。django url中的正則表達式的全局變量

有沒有一種方法來定義一個全局參數,並使用它而不是重寫相同的正則表達式?

,而不是例如:

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'), 

回答

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'),