Django“主页”应用urls.py问题

时间:2014-07-08 18:36:51

标签: python django

我是Django的新手,当我放置我的网站时,我按以下方式做到了:

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

  • App 1“home”是包含主页,登录,注册的应用程序 和其他“网站范围”功能
  • App 2“库存”是基本资产库存
  • App 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来管理任何站点范围的功能,例如登录,注册等。

现在家庭索引视图显示很好,但是... / home / 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的答案,因为它更准确,包括需要将主页包含在其余部分之下。

这是我的新portal / 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'^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'),
)

3 个答案:

答案 0 :(得分:2)

问题在于您的第一个模式,该模式仅匹配空URL。因此,任何空的网址都会导致home/urls.py网址被分析,但只有空网址才会匹配。

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

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

答案 1 :(得分:1)

Django看起来像这样的网址:

  1. 获取根网址列表 - portal / urls
  2. 首先查找,与当前网址匹配
  3. 如果是包含,请转到包含的网址,切断匹配的部分
  4. 你的问题在这里

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

    我的意思是,这里

    '^$'
    

    您希望网址匹配“网址的开头和结尾”。它适用于root(dunno.com/),但不适用于其他人,因为url将包含更多内容......

    所以,只需删除$即可。

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

答案 2 :(得分:0)

您永远不需要在project / urls.py中添加正则表达式($)