2009-07-15 43 views
0

我做這樣的事情在其他myproject.myapp.urls URL模式:Django的:包括在一個urls.py

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>)?

+1

沒有它會導致什麼問題?使用include('')通常非常簡單。你能描述一下它給出的錯誤,或者輸出與你期望的不同嗎? – anschauung 2009-07-15 02:15:48

回答

1

我不認爲你可以做你試圖用此線做:

(ur'^(?P<url_key>[-a-zA-Z0-9]+)/', include('myproject.myapp.urls2')) 

什麼看法url_key參數將傳遞給?

我不知道你爲什麼要重構開始與URL模式,但也許這將是更好?:

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 
) 
3

我不是django的專家,但是'view1'項不會匹配下面的所有其他條目,因爲它最後沒有'$'。所以其他意見不會有機會得到匹配。

+0

+1將最終結果或每個網址都包含$。 – Soviut 2009-07-15 02:19:56

+0

啊,那是我的錯。我給你一票。 :) – Achimnol 2009-07-15 02:50:21

0

也許你可以簡化myproject.myapp.urls中的表達式,並將其作爲參數傳遞給函數myproject.myapp.views

我不確定你的測試出了什麼問題,但總的來說,你可以在myproject.myapp.views中做更多的事情,因爲你不必將所有的東西都放在正則表達式邏輯上。

,在myproject.myapp.views功能將是調用視圖1,視圖2配電等