如何使django识别两个URL?

时间:2018-11-21 18:08:08

标签: python django django-urls

我是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时,什么都没有改变。

我该如何解决?

谢谢!

2 个答案:

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