我是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中没有其他内容,则第一个规则将匹配(毕竟,不知道如何到达这一点),您将获得帮助视图。给定此文件,根本无法知道您要去“索引”。到达此处后,将此文件视为一个实体。它不知道先于它。它只是试图匹配此时给出的内容。

10-07 15:59
查看更多