0

我正在做这样的事情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>) 的公共部分?

4

3 回答 3

3

我不是 django 专家,但 'view1' 项是否与它下面的所有其他条目匹配,因为它最后没有'$'?因此,其他视图将没有机会匹配。

于 2009-07-15T02:15:56.560 回答
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
)
于 2009-07-15T02:30:32.120 回答
0

也许您可以简化 中的表达式myproject.myapp.urls,而是将信息作为参数传递给 中的函数myproject.myapp.views

我不确定你的测试出了什么问题,但一般来说,你可以做更多的事情,myproject.myapp.views因为你不必完全基于正则表达式逻辑。

该函数myproject.myapp.views将是一个调用 view1、view2 等的交换机

于 2009-07-15T02:21:30.060 回答