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

しかし、urlresolverを含むユニットテストで問題が発生するようです。

ここで正規表現()の一般的な部分を「リファクタリング」するためのより良い方法はあり<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 に答える