在urlpatterns中使用includes时,Django管理员失败

时间:2010-03-17 19:28:17

标签: django django-urls

我正在尝试重构我的应用程序以防止它过于笨拙。所以我开始将一些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}),

我到目前为止移动的网址是结帐/优惠/订单,这些都是'commerce'的子应用,其中应用的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),
)

并且应用程序提供商业。

所以额外的问题是管理员根本不会工作,所以我在想,因为我用我的包裹将它杀死了。

我检查过的事情:   urlpatterns变量是否意外地在某处重置(即urlpatterns = patterns,而不是urlpatterns + = patterns)   commerce.urls中的模式是否有效(是的,当它们移回root时它们有效)。

所以从那里我很难过。我可以将所有东西都移回根目录,但是试图让它有点脱钩,不仅仅是出于理论上的原因而是为了一些短期的原因。

最后,如果我输入www.domainname / checkout / orderform / onepage / xxxjsd,我会得到正确的页面。但是,输入www.domainname / checkout /会由alchemysites.views.get_path处理。

如果不是答案(因为这非常具体),那么有一个很好的方法来解决urls.py问题吗?这似乎只是反复试验。似乎应该有某种解析器会告诉你你的urlpatterns会做什么。

2 个答案:

答案 0 :(得分:4)

在我的urls.py中添加以下行为我工作:

from django.conf.urls import include 

答案 1 :(得分: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/

将全部与(r'^offers/$','offers.views.start_offers')中的网址格式commerce/urls.py匹配。

如果要在/checkout/中定义commerce.py的视图,则需要添加模式

(r'^$', 'path_to_your_view')

因为/ {checkout / part将被include()

切断

撇开:

/commerce/urls.py中,使用

urlpatterns = patterns('',
    ...

为您定义的第一个模式。然后,您可以稍后在同一文件中使用urlpatterns +=