我在myproject.myapp.urls
中做了类似的事情:
from django.conf.urls.defaults import *
urlpatterns = patterns('myproject.myapp.views',
(ur'^$', 'index'),
(ur'^browse/$', 'browse'),
(ur'^request/new/$', 'new_request'),
(ur'^(?P<url_key>[-a-zA-Z0-9]+)/$', 'view1'),
(ur'^(?P<url_key>[-a-zA-Z0-9]+)/asdf$', 'view2'),
(ur'^(?P<url_key>[-a-zA-Z0-9]+)/qwer$', 'view3'),
(ur'^(?P<url_key>[-a-zA-Z0-9]+)/zxcv$', 'view4'),
(ur'^(?P<url_key>[-a-zA-Z0-9]+)/tyui$', 'view5'),
(ur'^(?P<url_key>[-a-zA-Z0-9]+)/ghjk$', 'view6'),
(ur'^(?P<url_key>[-a-zA-Z0-9]+)/bnm/more-looong-url/$', 'view7'),
...
)
我尝试重构上述规则,并将其定义在另一个文件urls2.py
中,如下所示:
(ur'^(?P<url_key>[-a-zA-Z0-9]+)/', include('myproject.myapp.urls2')),
但它似乎会导致包括urlresolvers在内的单元测试出现问题。
这里有更好的方法来“重构”正则表达式的公共部分(<url_key>
)吗?
答案 0 :(得分:3)
我不是django专家,但是'view1'项不会匹配它下面的所有其他条目,因为它最后没有'$'吗?所以其他观点没有机会匹配。
答案 1 :(得分:1)
我认为你不能做你想用这条线做的事情:
(ur'^(?P<url_key>[-a-zA-Z0-9]+)/', include('myproject.myapp.urls2'))
将url_key
参数传递给哪个视图?
我不确定你为什么要重新开始urlpatterns,但也许这会更好?:
from django.conf.urls.defaults import *
URL_KEY = ur'^(?P<url_key>[-a-zA-Z0-9]+)'
urlpatterns = patterns('myproject.myapp.views',
(ur'^$', 'index'),
(ur'^browse/$', 'browse'),
(ur'^request/new/$', 'new_request'),
(URL_KEY+ur'/$', 'view1'),
(URL_KEY+ur'/asdf$', 'view2'),
(URL_KEY+ur'/qwer$', 'view3'),
...etc
)
答案 2 :(得分:0)
也许您可以简化myproject.myapp.urls
中的表达式,而是将信息作为参数传递给myproject.myapp.views
中的函数?
我不确定您的测试中出现了什么问题,但一般来说,您将能够在myproject.myapp.views
中执行更多操作,因为您不必将其全部基于正则表达式逻辑。
myproject.myapp.views
中的该函数将是一个调用view1,view2等的交换机