Django - 当前的 URL 与这些中的任何一个都不匹配

Posted

技术标签:

【中文标题】Django - 当前的 URL 与这些中的任何一个都不匹配【英文标题】:Django - The current URL, , didn't match any of these 【发布时间】:2016-08-13 02:47:27 【问题描述】:
from django.conf.urls import include, url, patterns
from django.contrib import admin

#urlpatterns = [
#    url(r'^mypage/', include('mypage.urls')),
#    url(r'^admin/', admin.site.urls),
#]


urlpatterns = patterns('',
url(r'^$', 'mypage.views.home', name='home'),
url(r'^admin/', admin.site.urls),
)

未注释的代码工作正常。但根据教程,注释代码也应该工作。但它显示了“当前网址与其中任何一个不匹配”的错误。代码路径为/ownblog/ownblog/urls.py

urlpatterns = patterns('',
url(r'^$', 'views.home', name='home'),
)

以上代码在ownblog/mypage/urls.py中

def home(request):
    return HttpResponse("Hello, world. You're at the polls index.")

以上代码在ownblog/mypage/views.py 我错过了什么

【问题讨论】:

并请求获取错误消息的 url?因为如果您请求/,则注释模式不包括根页面的模式,只有/admin/*/mypage/* 的模式。 使用定义在 ownblog.urls 中的 URLconf,Django 尝试了这些 URL 模式,顺序如下: ^mypage/ ^admin/ 当前 URL 不匹配任何这些。 注释代码没有为空 URL 定义路由。如果您尝试使用/mypage,您可能会得到结果。如果教程说根 url 应该由注释代码处理,那么教程是错误的。 docs.djangoproject.com/en/1.9/intro/tutorial01教程来自django官网 您尚未在注释代码中为 / 定义 url 模式,因此收到该消息并不奇怪。教程告诉你去http://localhost:8000/polls/。在您的情况下,将其更改为http://localhost:8000/mypage/,因为您使用mypage 而不是polls 【参考方案1】:

您访问http://localhost:8000/ 时的错误消息是预期的,因为您尚未在注释代码中为 / 定义 url 模式。教程告诉你去http://localhost:8000/polls/。在您的情况下,将其更改为http://localhost:8000/mypage/,因为您使用mypage 而不是polls

第二个错误No module named views 是因为您在网址格式中使用了字符串'views.home',而不是可调用的views.home。确保您也包含导入。

from . import views

urlpatterns = [
    url(r'^$', views.home, name='home'),
]

我注意到您没有密切关注1.9 tutorial。例如,您正在使用patterns()'mypage.views.home' 之类的字符串,它们自Django 1.8 以来都已过时。我认为您会发现在开始更改大量内容之前完全按照教程进行操作很有用。

【讨论】:

【参考方案2】:

django 的新功能需要新的解决方案...

from django.conf.urls import url
from django.contrib import admin

from polls.views import urls

urlpatterns = [
    ...
    url(r'^polls/$', urls),
] 

在浏览器中输入,在 django 1.10 中测试

http://localhost:8000/polls/

请在 django 1.10 中下载一个有效的“HelloWorld”示例

https://mega.nz/#!qFsgBbRD!lAKKprkMLmhJcaZ8h5NPxkZcfQpB8qrh1nU4rSSaRAo

【讨论】:

【参考方案3】:

您可以在 urls.py 文件中的 urlpatterns 上方看到 django 的注释行。

会有一个设置你要导入的url的路径的模式,你可以复制粘贴它并根据你的视图名称更改属性。

我这么说是因为 urlpatterns 因版本而异,所以要根据您的 django 版本编写 url,您可以参考。

【讨论】:

【参考方案4】:

我认为这只是您的语法错误。 也许您正在学习旧教程。 试试这个:

url(r'^$',views.home,name='home')

如果这不能解决你的问题,试试这个(个人不推荐;我对这个地区还有一些疑问):

from django.urls import path
from mypage(appName) import views
...
urlpatterns = [
       path(r'^$', views.home, name='home'),
       path(r'^admin/', admin.site.urls),
]

这在我的案例中曾经有效,但我仍然不确定为什么!

【讨论】:

【参考方案5】:

看起来你在看旧教程,试试这个

from django.contrib import admin
from django.urls import include, path
from polls<your_app> import views


urlpatterns = [
    ...
    path('', views.home, name = 'home'),
] 

【讨论】:

【参考方案6】:

从 django.conf.urls 导入 url,包含

变化:

urlpatterns = [
  path('admin/', admin.site.urls),
  path('polls', include('polls.urls')),

urlpatterns = [
  url(r'^polls/', include('polls.urls')),
  url(r'^admin/', admin.site.urls),
]

【讨论】:

【参考方案7】:

我也经历过这个问题。有时您的浏览器由于启动问题(从 IDE/代码编辑器端)而无法加载页面,因此,只需在浏览器中执行 Empty Cache and Hard Reload 然后重新运行命令它会完美运行。

【讨论】:

以上是关于Django - 当前的 URL 与这些中的任何一个都不匹配的主要内容,如果未能解决你的问题,请参考以下文章

当前 URL app/ 与其中任何一个都不匹配

当前 URL 与其中任何一个都不匹配 - 使用多个站点

Django中的 动态URL配置

Django 模板--基于当前 URL 路径的条件

Django get_absolute_url 调用与当前页面相同的 URL

Django与Flask的对比:路由映射的区别