Я просто проверял django и пытался просмотреть список книг, передав id
в качестве аргумента URL-адресу books/urls.py
. Но при получении ошибки 404 страница не найдена. Я не понимаю, что не так с 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'
книги/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
РЕДАКТИРОВАТЬ. Как указано в комментариях. Пытался добавить /
в выражение URL-адреса thebooks.urls
, но безуспешно :(
books = Book.objects.filter(id=id)
выглядит немного странно. Еслиid
— это идентификатор книги, я ожидаю увидетьbook = Book.objects.get(id=id)
или, возможно,book = get_object_or_404(Book, id=id)
. - person Alasdair   schedule 16.11.2017book_id
, и это были дубликаты, поэтому заменили его наid
в рамках тестирования. - person Laxmikant   schedule 16.11.2017redirect
неправильно смешивает жестко заданный URL-адрес и kwargs. Вы можете либо создать URL-адрес с помощьюreturn redirect('/books/list/%s/' % instance.id)
, либо рекомендуемый подход — позволить Django изменить URL-адрес с помощьюreturn redirect('list_view', kwargs={id:instance.id})
. - person Alasdair   schedule 16.11.2017id
в URL-адресах. Пробовал вводить URL вручную в браузере. - person Laxmikant   schedule 16.11.2017redirect
неверен, даже если он не выдает вам ошибку. Я предполагаю, что реверс молча завершится ошибкой и будет перенаправлен на/books/list/
, игнорируя kwargs. - person Alasdair   schedule 16.11.2017