Django 404 с существующей записью в базе данных

Я совсем новичок в django и сейчас работаю над своим первым неуправляемым проектом. Я столкнулся с проблемой, которая кажется мне очень неразумной, и я не могу решить ее самостоятельно.

В принципе, я получаю совпадение шаблона url, но также получаю 404 ошибку, что страница не найдена. Я тестировал это с различными записями, и результат всегда один и тот же - 404.

companies/urls.py

from . import views
from django.conf.urls import url

urlpatterns = [
    url(r'^company/(?P<pk>)', views.CompanyDetailView.as_view(), name='company-detail')
]

Main/urls.py

rom django.contrib import admin
from django.urls import include, path


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

и вот сообщение об ошибке: *"Страница не найдена (404) Не найдена компания, соответствующая запросу Метод запроса: GET URL запроса: http://127.0.0.1:8080/companies/company/F/. Вызвано: companies.views.CompanyDetailView Используя URLconf, определенный в main.urls, Django попробовал эти шаблоны URL, в таком порядке:

admin/

компании/ ^company/(?P) [name='company-detail']

Текущий путь, companies/company/F/, совпал с последним.

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

Просто чтобы добавить, я могу получить доступ к записи из администратора с помощью url

http://127.0.0.1:8080/admin/companies/company/F/change/

Здесь я действительно заблудился и сомневаюсь в своем рассудке.

Отсутствует часть регулярного выражения первичного ключа, например:

urlpatterns = [
    url(r'^company/(?P<pk>.*)/$', views.CompanyDetailView.as_view(), name='company-detail')
]

Если вы работаете с url(…), то он ожидает, что для параметров вы добавите regex для захвата значения. Если вы не укажете никакого regex между скобками, то шаблон будет считаться пустым, и, следовательно, параметром будет пустая строка.

Я не знаю, является ли pk хорошим названием параметра, поскольку вы передаете ему такие элементы, как F. возможно, его следует переименовать в slug или что-то подобное.


Примечание: Начиная с версии , url(…) [Django-doc] является deprecated в пользу re_path(…) [Django-doc]. Кроме того, был введен новый синтаксис для путей с конвертерами путей: вы используете path(…) [Django-doc] для этого.

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