首页 > 解决方案 > URLpattern 匹配没有按预期工作

问题描述

我想要的是

我正在运行Django 项目教程的第一步,并且已经有一些我无法做到的事情。

include() 背后的想法是让即插即用 URL 变得容易。由于投票在它们自己的 URLconf (polls/urls.py) 中,它们可以放在“/polls/”下,或“/fun_polls/”下,或“/content/polls/”下,或任何其他路径根目录下,并且该应用程序仍然可以运行。

我根据需要构建了所有东西,我的“架子”服务器工作正常(在此处调试,在 localhost 上运行)。我在shelf.urls 中设置urlpatterns,其中第一个尝试包含'bluebook.urls'。

from django.contrib import admin
from django.urls import include, path

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

当我去http://127.0.0.1:8000/bluebook/时,它工作正常并加载了我设置的views.index。

什么不起作用

当我转到http://127.0.0.1:8000/thebluebook/时,它会抛出 404。它定义正则表达式匹配不起作用

Using the URLconf defined in shelves.urls, Django tried these URL patterns, in this order:
    1. bluebook/
    2. admin/
The current path, thebluebook/, didn't match any of these.

它与http://127.0.0.1:8000/the_bluebook/http://127.0.0.1:8000/go/bluebook/相同。

我试过的

我没有写太多代码,所以没有太多可以加入到这个总结中。虽然错误消息只提到了shelf.urls,但我检查了bluebook.urls 是否设置为在从shelf.urls 重定向后接受任何正则表达式:

from django.urls import path
from . import views

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

我检查了Django 教程第 1 部分错误:URL 与 URL 模式不匹配,并尝试将 ROOT_URLCONF 从“shelves.urls”更改为“urls”,但它抛出了一个 ERR_CONNECTION_REFUSED 而不是 404,无论我放在http://127.0 之后。 0.1:8000/,基本上该网站不再工作了。

我在 Django 网站上查看了Page not found 404?但我网站的 urls.py 位于子文件夹mysite/,而不是父文件夹 mysite/。

我也试过

urlpatterns = [
    path('bluebook/', 'bluebook.urls'),
    path('admin/', admin.site.urls),
]

但它也不起作用。

基本上,我的所有设置对我来说都是正确的,因为调用确切的 URLpattern 可以按预期工作。只有正则表达式匹配似乎不起作用。

FWIW,我正在使用 JetBrain 的 PyCharm 来编辑代码并设置 venv,没有插件,但我认为它不会影响 Django 代码的运行。

Python 版本: win32 上的 Python 3.6.5(v3.6.5:f59c0932b4,2018 年 3 月 28 日,17:00:18)[MSC v.1900 64 位(AMD64)]

Django 版本: 2.0.7

PyCharm 版本: 2018.1.4

Chrome 版本:版本 67.0.3396.99(官方构建)(64 位)

标签: django

解决方案


您的网址中没有包含“thebluebook”。你有path('bluebook/', include('bluebook.urls')),path('', views.index, name='index'), 这意味着你可以做http://127.0.0.1:8000/bluebook/any/thing/here/但你不能http://127.0.0.1:8000/any/thing/here/bluebook/


推荐阅读