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

时间:2017-11-16 16:20:22

标签: python django django-urls django-2.0

我刚刚检查了django,并试图通过将id作为参数传递给URL books/urls.py来列出书籍。但是找不到404页错误。当我在浏览器中输入此网址时,我在网址中没有弄错:

 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'

书籍/ urls.py

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

书籍/ 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来尝试,但没有运气:( Screenshot

1 个答案:

答案 0 :(得分:4)

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

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

如果您想要撤销网址,则需要name

如果你想坚持使用正则表达式,那么使用re_path(或url()仍然有效,如果你想与旧版本的Django兼容)。有关详细信息,请参阅URL dispatcher docs

请注意尾部斜杠 - 否则您的路径与http://192.168.0.106:8000/books/list/21匹配,但不匹配http://192.168.0.106:8000/books/list/21/