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
.