我正在尝试重构我的应用程序以防止它过于笨拙。所以我开始将一些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是清楚的。
问题中的/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会做什么。
答案 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 +=
。