我对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'))
]
这是我的观点.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中有一个错误的配置,通常会有这样的配置。
在您的应用程序URL文件中:
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'),
]
在您的项目URL文件中:
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')),
]
在应用程序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中没有其他内容,第一条规则都会匹配(毕竟,它不知道你是如何达到这一点的(,你会得到帮助视图。给定这个文件,根本没有办法知道您打算转到"索引"。一旦你到了这里,就把这个文件想象成一个单独的实体。它不知道之前发生了什么。它只是试图匹配此时给出的内容。