2010-03-17 47 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