我是Django的新手,当我放置我的网站时,我按以下方式做到了:
该项目是各种各样的“门户”,
现在我正在尝试添加登录功能,我有一个主项目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'),
)
答案 0 :(得分:2)
问题在于您的第一个模式,该模式仅匹配空URL。因此,任何空的网址都会导致home/urls.py
网址被分析,但只有空网址才会匹配。
不幸的是,如果没有共同的前缀,那么该模式"^"
将匹配每个URL(因为它们都从头开始......)。
因此,您应该为所有页面使用公共前缀,或者将主页URL规范放在最后,以便在测试之前为其他URL提供匹配的机会。
答案 1 :(得分:1)
Django看起来像这样的网址:
你的问题在这里
url(r'^$', include('home.urls'), name='home'),
我的意思是,这里
'^$'
您希望网址匹配“网址的开头和结尾”。它适用于root(dunno.com/
),但不适用于其他人,因为url将包含更多内容......
所以,只需删除$
即可。
url(r'^', include('home.urls'), name='home'),
答案 2 :(得分:0)
您永远不需要在project / urls.py中添加正则表达式($)