Django URL为我提供了root和包含url之间的空间

时间:2018-02-02 06:50:17

标签: python django url

所以我使用这行

在root / project / urls.py中创建一个url
from django.conf.urls import include
from django.contrib import admin
from django.urls import path

urlpatterns = [
    path('admin/', admin.site.urls),
    path('users/', include('app.urls'))
]

在我的root / app / urls.py

from django.urls import path

from .views import UserView, AuthenticationView

urlpatterns = [
    path('register/', UserView.as_view()),
    path('auth/', AuthenticationView.as_view()),
]

因此,我们需要http://localhost:8000/users/registerhttp://localhost:8000/users/auth个网址。

同时我的请求没有按预期行事。

enter image description here

显然它会在根路径和包含路径之间返回一个空格。我检查我的root / project / settings.py文件我找不到任何奇怪的设置。有人知道发生了什么吗?

3 个答案:

答案 0 :(得分:3)

屏幕截图中的错误消息指出请求网址http://localhost:8000/users不存在。

在此,您将/users/重定向到app.urls

path('users/', include('app.urls'))

但在app.urls中,您从未在网址仅以" / users /"结尾时添加模式。相反," / users / register /"和" / users / auth /"都是指定的。

urlpatterns = [
    path('register/', UserView.as_view()),
    path('auth/', AuthenticationView.as_view()),
]

因此http://localhost:8000/users/registerhttp://localhost:8000/users/auth应该是有效的网址,但http://localhost:8000/users不是。

您可以在网址结束时添加其他网址格式" / users /":

urlpatterns = [
    path('', AuthenticationView.as_view()), # maybe the same as /auth/ ?
    path('register/', UserView.as_view()),
    path('auth/', AuthenticationView.as_view()),
]

总而言之,Django实际上没有错误,因为该页面不存在(404),因为你在任何{{1}中都没有匹配http://localhost:8000/users }。

答案 1 :(得分:0)

该空间仅用于在调试屏幕上显示URL的构建方式

我经历过同样的事情,起初我也认为Django以某种方式增加了空间。最后,实际上是指定的URL与浏览器中的URL不匹配。 Safari不会显示完整的网址,因此错误可能会很快发生...

另一些​​info on urls in Django can be found here

答案 2 :(得分:-1)

您是否尝试使用正则表达式?

path(r'^admin/', admin.site.urls)

否则在Django 2版本中url架构已经更改,我使用url函数代替路径函数,这可能是你问题的可能解决方法