如何让 django 识别两个 url?
How to make django to recognize two urls?
我对 Django 和网络编程完全陌生,我什至不知道如何足够准确地问这个问题。如果我要求的是显而易见的事情,请原谅。
我正在尝试将两个不同的 url 放入同一文件夹应用程序中的一个 urls.py 文件中。我注意到 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, everything works fine I can see the "HELP PAGE" but when I reqest 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'),
]
在您的项目 urls 文件中:
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 中没有其他内容,第一条规则将匹配(毕竟,它不知道你是如何到达这里的点),你会得到帮助视图。有了这个文件,根本就没有办法知道你打算去 "index"。到达此处后,将此文件视为一个实体。它不知道前面是什么。它只是试图匹配此时给出的内容。
我对 Django 和网络编程完全陌生,我什至不知道如何足够准确地问这个问题。如果我要求的是显而易见的事情,请原谅。
我正在尝试将两个不同的 url 放入同一文件夹应用程序中的一个 urls.py 文件中。我注意到 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, everything works fine I can see the "HELP PAGE" but when I reqest 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'),
]
在您的项目 urls 文件中:
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 中没有其他内容,第一条规则将匹配(毕竟,它不知道你是如何到达这里的点),你会得到帮助视图。有了这个文件,根本就没有办法知道你打算去 "index"。到达此处后,将此文件视为一个实体。它不知道前面是什么。它只是试图匹配此时给出的内容。