我是Django和Web编程的新手,我什至不知道如何精确地提出这个问题。请问如果我要提出明显的要求。
我试图在一个urls.py文件中将两个不同的URL放在同一个文件夹应用程序中。我注意到Django无法识别它们,因此总是打开第一个。
这是我的应用程序urls.py文件:
from django.conf.urls import url
from second_app import views
urlpatterns = [
url(r'^$', views.help, name='help'),
url(r'^$', views.index, name='index'),
]
这是我的prooject urls.py文件:
from django.conf.urls import url, include
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^index/', include('second_app.urls')),
url(r'^help/', include('second_app.urls'))
]
这是两个页面共有的我的views.py:
from django.shortcuts import render
from django.http import HttpResponse
def help(request):
help_dict = {'help_insert':'HELP PAGE'}
return render(request, 'second_app/help.html', context=help_dict)
def index(request):
my_dict = {'insert_me':'INDEX'}
return render(request, 'second_app/index.html', context=my_dict)
现在,当我尝试请求http://127.0.0.1:8000/help时,一切正常,我可以看到“帮助页面”,但是当我要求http://127.0.0.1:8000/index时,什么都没有改变。
我该如何解决?
提前致谢!
最佳答案
在您的应用程序url.py
文件中,两个规则都匹配相同的内容。让我们分析一下。首先,整个项目urls.py
:
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^index/', include('second_app.urls')),
url(r'^help/', include('second_app.urls'))
]
因此,无论您要转到
index/
还是help/
,最终都将查看second_app.urls
。到目前为止,很好,这可能是有道理的...但是之后:
urlpatterns = [
url(r'^$', views.help, name='help'),
url(r'^$', views.index, name='index'),
]
无论您如何到达此处(通过index /或help /),如果URL中没有其他内容,则第一个规则将匹配(毕竟,不知道如何到达这一点),您将获得帮助视图。给定此文件,根本无法知道您要去“索引”。到达此处后,将此文件视为一个实体。它不知道先于它。它只是试图匹配此时给出的内容。