Почему не находит страницу?

Я не понимаю, что я делаю не так. Страницу contacts/ он просто не находит.
В файле urls.py проекта:
urlpatterns = [

    url(r'^admin/', admin.site.urls),
    url(r'^', include('shop.urls', namespace='shop')),
    url(r'^cart/', include('cart.urls', namespace='cart')),
    url(r'^order/', include('orders.urls', namespace='orders')),
]

В urls приложения shop:
urlpatterns = [
    url(r'^$', views.BookList, name='BookList'),
    url(r'^(?P<category_slug>[-\w]+)/$', views.BookList, name='BookListByCategory'),
    url(r'^(?P<id>\d+)/(?P<slug>[-\w]+)/$', views.BookDetail, name='BookDetail'),
    url(r'^contacts/$', views.ContactsPage, name='ContactsPage'),
]

В файле views.py приложения shop:
def ContactsPage(request):
    return render(request, 'shop/contacts/contacts.html')

В итоге, при попытке такого перехода выдает 404
<a href="{% url "shop:ContactsPage" %}" class="menu-ref">About us</a>

Объясните пожалуйста, где я допускаю ошибку.
  • Вопрос задан
  • 326 просмотров
Пригласить эксперта
Ответы на вопрос 2
sim3x
@sim3x
изучите пеп8 - там четко указано как нужно именовать функции

#
    url(r'^$', views.BookList, name='BookList'),
    url(r'^category/(?P<category_slug>[-\w]+)/$', views.BookList, name='BookListByCategory'),
    url(r'^book/(?P<id>\d+)/(?P<slug>[-\w]+)/$', views.BookDetail, name='BookDetail'),
    url(r'^contacts/$', views.ContactsPage, name='ContactsPage'),
Ответ написан
Комментировать
shultais
@shultais
Обучаю программированию на Python и SQL
В Django регулярки проверяются по порядку и при первом совпадении вызывают представление.
Когда пользователь в URL напишет /contacts/ - то это это будет соответствовать шаблону:
url(r'^(?P<category_slug>[-\w]+)/$', views.BookList, name='BookListByCategory')


Поэтому срабатывает представление BookList. Внутри у вас скорее всего написано что-то вроде:
category = get_object_or_404(Category, slug=category_slug)


Что и вызывает 404 ошибку, так как категории contacts не существует.

Исправить легко, нужно просто перенести последнюю строку наверх. Главное, чтобы у вас потом не появилась категория с slug='contacts'.
urlpatterns = [
    url(r'^contacts/$', views.ContactsPage, name='ContactsPage'),
    url(r'^$', views.BookList, name='BookList'),
    url(r'^(?P<category_slug>[-\w]+)/$', views.BookList, name='BookListByCategory'),
    url(r'^(?P<id>\d+)/(?P<slug>[-\w]+)/$', views.BookDetail, name='BookDetail')
]
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы