python - 在 Django 中使用 path() 找不到 404

标签 python django django-urls django-2.0

我刚刚检查了 django,并尝试通过将 id 作为参数传递给 URL books/urls.py 来列出书籍。但是得到 404 page not found 错误。当我在浏览器中输入这个 url 时,我没有在 url 中得到什么错误:

 http://192.168.0.106:8000/books/list/21/

书店/urls.py

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

settings.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'books'
   ]
...
...
...
ROOT_URLCONF = 'bookstore.urls'

books/urls.py

urlpatterns = [
     path('home/', create),
     path('list/(?P<id>\d+)', list_view),
]

books/views.py

def create(request):
    form = CreateForm(request.POST or None, request.FILES or None)
    if form.is_valid():
        instance = form.save(commit=False)
        instance.save()
        messages.success(request, "Book Created")
        return redirect('/books/list', kwargs={"id":instance.id})
    return render(request, "home.html", {"form":form})


def list_view(request, id=None):
    books = Book.objects.filter(id=id)
    return render(request, "list.html", {"books": books})

项目结构:

├── books
│   ├── admin.py
│   ├── forms.py
│   ├── __init__.py
│   ├── models.py
│   ├── urls.py
│   └── views.py
├── bookstore
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py

这是屏幕截图 - 404 Page

编辑 - 如评论中所述 - 尝试在 books.urls 的 url 表达式中附加 / 但没有成功:( Screenshot

最佳答案

您错误地使用了 Django 2.0 中的新 path。您不应该使用像 \d+ 这样的正则表达式。尝试将其更改为:

 path('list/<int:id>/', list_view, name='list_view'),

如果要反转 URL,则需要 name

如果你想坚持使用正则表达式,那么使用 re_path(或者如果你想与旧版本的 Django 兼容,url() 仍然有效)。查看URL dispatcher docs了解更多信息。

还要注意结尾的斜杠 - 否则你的路径匹配 http://192.168.0.106:8000/books/list/21 但不匹配 http://192.168.0.106:8000/books/list/21/.

关于python - 在 Django 中使用 path() 找不到 404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47334486/

相关文章:

python - 无法使用 start_copy_from_url 在 Azure 中复制 blob

python - IBoutlet 与 PyObjC 和 Interface Builder

python - 从查询 Django 访问模型方法 "def()"

mysql - 优化 django 查询

python - 为什么这个带有重复命名 url 条目的 URLConf/reverse() 组合有效?这样做的正确方法是什么?

python - 值错误: invalid literal for int() with base 10: ' '

python - libtorrent python 绑定(bind)中的 torrent_info() 和磁力链接

python - 安装 Django 的本地 git 存储库时出现无效要求错误

python - Django URL 类型错误 : view must be a callable or a list/tuple in the case of include()

django admin - 覆盖单项模型的更改 ListView