Django, Ошибка 404, Не найдено: /products/5 GIVE me Your hand

У меня есть вопрос по Django, я пытался решить его самостоятельно в течение 2 дней, но у меня нет никаких идей по этой проблеме, можете ли ВЫ мне помочь? Я читал книгу о Django, и там есть пример: urls.py

from django.urls import re_path
from django.urls import path
from firstapp import views

urlpatterns = [
    re_path(r'^products/?P<productid>\d+/', views.contact),
    re_path(r'^users/(?P<id>\d+)/?P<name>\D+/', views.about),
    re_path(r'^about/contact/', views.contact),
    re_path(r'^about', views.about),
    path('', views. index),

]

views.py

from django.http import HttpResponse


def index(request):
    return HttpResponse("<h2>Main</h2>")


def about(request):
    return HttpResponse("<h2>About site</h2>")


def contact(request):
    return HttpResponse("<h2>Contacts</h2>")


def products(request, productid):
    output = "<h2>Product № {0}</h2>".format(productid)
    return HttpResponse(output)


def users(request, id, name):
    output = "<h2>User</h2><h3>id: {О} " \
                   "Name:{1}</hЗ>".format(id, name)
    return HttpResponse(output)

Но после использования этой ссылки (http://127.0.0.l:8000/products/5) я получаю этот текст: Используя URLconf, определенный в hello.urls, Django попробовал эти шаблоны URL, в таком порядке:

^products/?P\d+/ ^пользователи/(?P\d+)/?P\D+/ ^ о/контакт/ ^about Текущий путь, products/5, не соответствует ни одному из этих путей.

Вы видите эту ошибку, потому что в вашем файле настроек Django установлено DEBUG = True. Измените это значение на False, и Django отобразит стандартную страницу 404.

И вот это в терминале: Not Found: /products/5 [08/Feb/2023 12:17:13] "GET /products/5 HTTP/1.1" 404 2597

Мне нужна Твоя помощь!

Я пытался удалить код о:

re_path(r'^products/?P<productid>\d+/', views.contact),
re_path(r'^users/(?P<id>\d+)/?P<name>\D+/', views.about),

и у меня нет этого "ERROR 404", но я не могу закончить свой проект без этого текста

Сам еще не тестировал это решение - но похоже, что вам не хватает скобок. Я считаю, что первый путь, который вы настроили, должен быть примерно таким:

re_path(r'^products/(?P<productid>\d+)/', views.contact),

Это должно работать, но будет соответствовать products/5, а также products/5/anything/else/here, что, вероятно, не то поведение, которое вам нужно. В этом случае путь должен быть примерно таким:

re_path(r'^products/(?P<productid>\d+)/$', views.contact),

В документации по django довольно хорошо объясняется, как все это работает, с любой необходимой вам степенью детализации, смотрите https://docs.djangoproject.com/en/4.1/ref/urls/#re-path

РЕДАКТ: В приведенном выше тексте views.contact должно быть views.products. Предположительно это должно указывать на ваше представление def products.

Вернуться на верх