我是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'),
]
这是我的项目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时,什么都没有改变。
我该如何解决?
谢谢!
答案 0 :(得分:4)
您的网址配置有误,通常是这样配置的。
在您的应用网址文件中:
from django.conf.urls import url
from second_app import views
urlpatterns = [
url(r'^help/$', views.help, name='help'),
url(r'^index/$', views.index, name='index'),
]
在您的项目网址文件中:
from django.conf.urls import url, include
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'', include('second_app.urls')),
]
答案 1 :(得分:0)
在您的应用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中没有其他内容,则第一个规则将匹配(毕竟,不知道如何到达此点),您将获取帮助视图。给定此文件,根本无法知道您要去“索引”。到达此处后,将此文件视为一个实体。它不知道先于它。它只是试图匹配此时给出的内容。