2010-03-17 46 views
1

我想重構我的應用程序一點點,以防止它變得太笨拙。所以我開始將一些urlpatterns移動到子文件中,如文檔提出的那樣。Django管理失敗時使用包括在urlpatterns

除了這個事實,它似乎沒有工作(項目不被重新路由),但當我去管理員,它說'urlpatterns尚未定義'。

的urls.py我有我的應用程序的根目錄是:

if settings.ENABLE_SSL: 
urlpatterns = patterns('', 
    (r'^checkout/orderform/onepage/(\w*)/$','checkout.views.one_page_orderform',{'SSL':True},'commerce.checkout.views.single_product_orderform'), 
) 
else: 
    urlpatterns = patterns('', 
    (r'^checkout/orderform/onepage/(\w*)/$','commerce.checkout.views.single_product_orderform'), 
) 

urlpatterns+= patterns('', 
    (r'^$', 'alchemysites.views.route_to_home'), 
    (r'^%s/' % settings.DAJAXICE_MEDIA_PREFIX, include('dajaxice.urls')), 
    (r'^/checkout/', include('commerce.urls')), 
    (r'^/offers',include('commerce.urls')), 
    (r'^/order/',include('commerce.urls')), 
    (r'^admin/', include(admin.site.urls)), 
    (r'^accounts/login/$', login), 
    (r'^accounts/logout/$', logout), 
    (r'^(?P<path>.*)/$','alchemysites.views.get_path'), 
    (r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root':settings.MEDIA_ROOT}), 

我已遷出的URL至今都結帳/報價/訂單這是「電子商務」,其中的所有subapps的應用程序的urls.py應該清楚。

/urls.py的問題(​​這裏包括)

/commerce/urls.py,我想包括urls.py是:

order_info = { 
'queryset': Order.objects.all(), 
} 


urlpatterns+= patterns('', 


(r'^offers/$','offers.views.start_offers'), 
(r'^offers/([a-zA-Z0-9-]*)/order/(\d*)/add/([a-zA-Z0-9-]*)/(\w*)/next/([a-zA-Z0-9-)/$','offers.views.show_offer'), 
(r'^reports/orders/$', list_detail.object_list,order_info), 
) 

和應用下電子商務提供的謊言。

所以額外的問題是,管理員根本無法工作,所以我在想,因爲我用我的包裝殺死了它。

事情我必須檢查: 是可變的URL模式意外獲得重置地方(即URL模式=模式,而不是URL模式+ =模式) 是在commerce.urls有效模式(是的,當搬回根他們的工作)。

所以從那裏我很難過。我可以將所有的東西都移回到根,但是試圖讓它有點脫鉤,不僅僅是出於理論上的原因,而且還有一些短期的原因。

最後,如果我輸入www.domainname/checkout/orderform/onepage/xxxjsd,我會得到正確的頁面。但是,輸入www.domainname/checkout /會被alchemysites.views.get_path處理。

如果不是答案(因爲這非常具體),那麼是否有排除urls.py故障的好方法?這似乎只是試錯。似乎應該有某種解析器會告訴你你的urlpatterns會做什麼。

回答

3

看看including other url confs的django文檔。我想你可能誤解了他們。特別是

每當Django遇到include()時,它會截斷與該點匹配的URL的任何部分,並將剩餘的字符串發送到包含的URLconf以供進一步處理。

舉個例子,你有

(r'^/checkout/', include('commerce.urls')), 
(r'^/offers',include('commerce.urls')), 
(r'^/order/',include('commerce.urls')), 

這意味着

/checkout/offers/ 
/offers/offers/ 
/order/offers/ 

都將匹配commerce/urls.py URL模式(r'^offers/$','offers.views.start_offers')

如果你想在commerce.py定義/checkout/視圖,你需要添加圖案

(r'^$', 'path_to_your_view') 

因爲入/簽出/部分將由include()


由於被砍掉,旁邊:

/commerce/urls.py,使用

urlpatterns = patterns('', 
    ... 

您定義的第一個模式。然後可以在同一個文件中稍後使用urlpatterns +=

+0

是的,這正是它。我把這些部分更深入地移動到了commerce.checkout.urls等等。是的,我誤解了關於「切斷」的部分,我認爲這部分只涉及斜線。謝謝 – zenWeasel 2010-03-17 21:42:36

4

添加在我urls.py以下行工作對我來說:

from django.conf.urls import include