2014-07-08 41 views
1

我非常新的Django的,当我把我的网站了,我做到了以下列方式:Django的“主页”应用urls.py问题

该项目是各种各样的“门户”,

  • 应用1“家”是容纳主页,登录,注册 等“站点范围”功能
  • 应用2“库存”是一个基本的资产清查
  • 应用3“仪表板”是该应用一组状态仪表盘,基于库存中的资产

现在我尝试添加的登录功能,我有一个主要项目urls.py,看起来像这样:

文件:/portal/urls.py

from django.conf import settings 
from django.conf.urls import patterns, include, url 

from django.contrib import admin 
admin.autodiscover() 

urlpatterns = patterns('', 
    url(r'^$', include('home.urls'), name='home'), 
    url(r'^admin/', include(admin.site.urls), name='admin'), 
    url(r'^inventory/', include('inventory.urls'), name='inventory'), 
    url(r'^dashboard/', include('dashboard.urls'), name='dashboard'), 
    url(r'^capacity/', include('capacity.urls'), name='capacity'), 
) 

我的计划是使用包含.../home/urls.py来管理任何站点范围的功能,例如登录,注册等。

现在,主页索引视图显示得很好,但任何东西别的我ñ... /家庭/ urls.py给了我一个404

文件:/home/urls.py

from django.conf.urls import patterns, url 
from home import views 

urlpatterns = patterns('', 
    url(r'^test/$', views.index, name='home_test'), 
    url(r'^ajax_login/$', views.ajax_login, name='ajax_login'), 
    url(r'^$', views.index, name='home_index'), 
) 

在这一点上,我想我的问题是双重的:我是不是接近这是否正确?如果是这样,我如何获得所需的功能?如果不是的话,我应该如何改变事物的设置/布局方式,使之成为正确的“最佳实践”方式?

在此先感谢!

编辑

得到它的工作得益于dt0xff和holdenweb,接受holdenweb的答案,因为它是更准确,包括需要摆在家中包含的网址低于其他。

这里是我参考新门户/ urls.py文件

文件:/门户网站/网址。PY

from django.conf import settings 
from django.conf.urls import patterns, include, url 

from django.contrib import admin 
admin.autodiscover() 

urlpatterns = patterns('', 
    url(r'^admin/', include(admin.site.urls), name='admin'), 
    url(r'^inventory/', include('inventory.urls'), name='inventory'), 
    url(r'^dashboard/', include('dashboard.urls'), name='dashboard'), 
    url(r'^capacity/', include('capacity.urls'), name='capacity'), 
    url(r'^', include('home.urls'), name='home'), 
) 

回答

2

问题是你的第一个模式,它只会匹配空的网址。因此,任何空的网址都会导致对home/urls.py网址进行分析,但只有空的网址才会匹配。

不幸的是,如果没有共同的前缀,则该模式"^"将匹配每个URL(因为它们都从头开始......)。

因此,您应该为所有页面使用通用前缀,或者将主页URL规范放在末尾,以便在测试之前为其他URL提供匹配的机会。

1

Django就在这样的URL:根部的URL

  1. 获取列表 - 门户网站/网址
  2. 首先找到,它匹配当前URL
  3. 如果包括,去包括的网址,切断匹配部分

你的问题在这里

url(r'^$', include('home.urls'), name='home'), 

我的意思是,这里

'^$' 

你要的网址匹配 “开始,然后结束URL的”。它的工作原理与良好根(dunno.com/),但不与别人,因为网址将包含更多的东西......

所以,只是删除$和你的罚款

url(r'^', include('home.urls'), name='home'), 
+0

虽然即使空字符串有一个开始,这种模式将匹配所有的字符串。因此,顶级列表中的任何其他URL都不可能匹配,因此我建议对列表重新排序。 – holdenweb