Python “Django”;主页「;app url.py问题

Python “Django”;主页「;app url.py问题,python,django,Python,Django,我是Django的新手,当我布置我的网站时,我是用以下方式做的: 这个项目是一个“门户网站” app1“home”是一个包含主页、登录和注册的应用程序 以及其他“站点范围”功能 App 2“存货”是一种基本资产存货 App 3“仪表板”是一组基于库存资产的状态仪表板 现在我正在尝试添加登录功能,我有一个主项目urls.py,如下所示: 文件:/portal/url.py from django.conf import settings from django.conf.urls import

我是Django的新手,当我布置我的网站时,我是用以下方式做的:

这个项目是一个“门户网站”

  • app1“home”是一个包含主页、登录和注册的应用程序 以及其他“站点范围”功能
  • App 2“存货”是一种基本资产存货
  • App 3“仪表板”是一组基于库存资产的状态仪表板
现在我正在尝试添加登录功能,我有一个主项目urls.py,如下所示:

文件:/portal/url.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'),
)
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'),
)
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'),
)
我的计划是使用…/home/url.py来管理任何站点范围的功能,如登录、注册等

现在home index视图显示的很好,但是…/home/url.py中的任何其他内容都会给我一个404

文件:/home/url.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'),
)
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'),
)
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'),
)
在这一点上,我想我的问题是双重的:我的做法正确吗?如果是,如何获得所需的功能?如果没有,我应该如何改变事情的设置/布置方式,以正确的“最佳实践”方式进行

提前谢谢

编辑

多亏了dt0xff和holdenweb,它才得以工作,接受了holdenweb的答案,因为它更准确,包括需要将主url包含放在其他url的下面

这是我的新门户/url.py文件,供参考

文件:/portal/url.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'),
)
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'),
)
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'),
)

Django在URL中的外观如下:

  • 获取根URL列表-门户/URL
  • 首先查找与当前url匹配的
  • 如果是include,则转到includeurl,删除匹配的部分
  • 你的问题就在这里

    url(r'^$', include('home.urls'), name='home'),
    
    我是说,这里

    '^$'
    
    您希望url匹配“url的开始和结束”。它对root(
    dunno.com/
    )很好,但对其他人却不行,因为url将包含更多内容

    所以,只要删除
    $
    ,就可以了

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

    问题在于您的第一个模式,它将只匹配空URL。因此,任何空URL都会导致分析
    home/urls.py
    URL,但即使在这种情况下,也只有空URL会匹配

    不幸的是,如果没有公共前缀,那么模式
    “^”
    将匹配每个URL(因为它们都从开头开始…)


    因此,您应该为所有页面使用一个公共前缀,或者在测试之前将home URL规范放在末尾,以使其他URL有机会匹配。

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

    ,尽管即使空字符串有一个开头,此模式也会匹配所有字符串。因此,顶级列表中的任何其他URL都不可能匹配,因此我建议对列表重新排序。请在回答中添加解释。