我正在创建Django应用,并且遇到无法识别路由的问题。这是我尝试创建的同一DJango民意测验应用程序,但文档代码不起作用。这是我的代码如下:
djangoproject/urls.py
from django.conf.urls import url, include
from django.contrib import admin
urlpatterns = [
url(r'^simpleapp/', include('simpleapp.urls')),
url(r'^admin/', admin.site.urls),
]
simpleapp/views.py
from django.shortcuts import render
from django.http import HttpResponse, request
def index(request):
return HttpResponse("Hello, world. You're at the polls index.")
def detail(request, question_id):
return HttpResponse("You're looking at question %s." % question_id)
def results(request, question_id):
response = "You're looking at the results of question %s."
return HttpResponse(response % question_id)
def vote(request, question_id):
return HttpResponse("You're voting on question %s." % question_id)
simpleapp/urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
# ex: /simpleapp/
# url('', views.index, name='index'),
# ex: /simpleapp/5/
url('<int:question_id>/', views.detail, name='detail'),
# ex: /simpleapp/5/results/
url('<int:question_id>/results/', views.results, name='results'),
# ex: /simpleapp/5/vote/
url('<int:question_id>/vote/', views.vote, name='vote'),
]
如果我取消注释simpleapp/urls.py
代码的''路径的第一个URL,则显示的所有页面均为”路径。但是,如果我将url''路径保留为注释,则路由会给我以下错误:
Page not found (404)
Request Method: GET
Request URL: http://127.0.0.1:8000/simpleapp/34/
Using the URLconf defined in simple_django.urls, Django tried these URL patterns, in this order:
^simpleapp/ <int:question_id>/ [name='detail']
^simpleapp/ <int:question_id>/results/ [name='results']
^simpleapp/ <int:question_id>/vote/ [name='vote']
^admin/
The current path, simpleapp/34/, didn't match any of these.
You're seeing this error because you have DEBUG = True in your Django settings file. Change that to False, and Django will display a standard 404 page.
我无法使用path()
或django.conf.urls
导入django.urls
。 url()
成功。我正在使用python版本3.6.7和Django版本2.1.5。我想念什么?
答案 0 :(得分:2)
您在simpleapp / urls.py中使用的是路径语法,而不是正则表达式。更改为:
urlpatterns = [
path('<int:question_id>/', views.detail, name='detail'),
path('<int:question_id>/results/', views.results, name='results'),
path('<int:question_id>/vote/', views.vote, name='vote'),
]
您的项目URL使用的是正则表达式,尽管您可能希望使它们保持一致,但您不应更改它们。
答案 1 :(得分:1)
您定义诸如 Django 1.x
之类的路由url(r'^simpleapp/', include('simpleapp.urls')),
url(r'^admin/', admin.site.urls),
这是Django 1.x类型的路由定义
在Django 2中,您必须定义如下路由:
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('polls/', include('polls.urls')),
path('admin/', admin.site.urls),
]
在Django 2中,路由定义时不使用正则表达式
有关在 Django 2
中定义路线的信息,请参阅文档