Сопоставление URL-адреса Django не работает

У меня возникает ошибка Страница не найдена (404) при доступе к следующему URL-адресу:

http://localhost:8000/blog/blogroll/

Я использую Python 3.4 и Django 1.7.

Вот мои URL-адреса для проекта:

from django.conf.urls import patterns, include, url
from django.contrib import admin

urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'weblog.views.home', name='home'),
    url(r'^blog/', include('blog.urls', namespace='blog')),
    url(r'^admin/', include(admin.site.urls)),
)

и это мой URL для приложения "блог":

шаблоны импорта из django.conf.urls, просмотры импорта URL из блога

urlpatterns = patterns('',
       url(r'^$', views.index, name='index'),
       url(r'^(?P<slug>\S+)$', views.detail, name='detail'),
       url(r'^blogroll/$', views.blogroll, name='blogroll'),
       #url(r'^(?P<question_id>\d+)/results/$', views.results, name ='results'),
       #url(r'^(?P<question_id>\d+)/vote/$', views.vote, name='vote'),
       )

Помимо этого работает следующий URL:

http://localhost:8000/blog/

Не могу понять где ошибка. Пожалуйста, порекомендуйте.

Заранее спасибо!


person Muhammad Ahmed    schedule 05.01.2015    source источник


Ответы (1)


Переместите url(r'^blogroll/$', views.blogroll, name='blogroll'), вверх на одну строку.

/blog/anything соответствует вашему правилу (?P<slug>... раньше, чем ваше правило blogroll сможет совпасть.

Вы также должны закончить регулярное выражение slug с помощью / вне группы захвата, поскольку django любит URL-адреса, заканчивающиеся косой чертой, и ваша переменная поймает / при использовании \S+

person Yuji 'Tomita' Tomita    schedule 05.01.2015