2015-06-23 3 views
0

Я не понимаю, моя проблема вот мой код:Джанго URLs перенаправляет меня на другой взгляд

urls.py

urlpatterns = patterns('blog.views', 
    ... 
    url(r'^(?P<slug>.+)$', 'blog', name='blog'), 
    url(r'^membres$', 'membres', name='membres'), 
) 

просмотров:

def blog(request, slug): 
posts = Post.objects.filter(blog__slug=slug) 
return render(request, 'blog/blog.html', locals()) 

def membres(request): 
membres = User.objects.all() 
return render(request, 'blog/membres.html', {'membres': membres}) 

Вот моя ссылка в мой шаблон base.html

<li><a href="{% url "membres" %}">List</a></li> 

Когда Я нажимаю ссылку, которая перенаправляет меня на просмотр блога, а затем выводит blog.html вместо использования вида мембран.

У меня нет ошибок в консоли или в моем шаблоне.
Всего мой код в моем приложении под названием «блог»

ответ

3

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

urlpatterns = patterns('blog.views', 
    url(r'^/blog/(?P<slug>[-\w]+)/$', 'blog', name='blog'), 
    url(r'^membres/$', 'membres', name='membres'), 
) 

Если вы должны иметь универсальный образец, он должен быть последним в списке, так что другие модели имеют возможность соответствовать раньше:

urlpatterns = patterns('blog.views', 
    url(r'^membres/$', 'membres', name='membres'), 
    # other patterns... 
    url(r'^(?P<slug>[-\w]+)/$', 'blog', name='blog'), 
) 

Это также хорошая привычка всегда включать конечную косую черту (Django будет добавлять ее к запросам по умолчанию). Чтобы соответствовать slug, я предлагаю [-\w]+, который будет соответствовать любой последовательности буквенно-цифровых символов, _ и -.

1

Это потому, что urlresolver берет образцов сверху вниз и спички «» membres (?P<slug>.+) так urlresolver возвращает blog вид. Поместите более конкретные URL-адреса выше. Также я предлагаю использовать более конкретные символы в регулярном выражении slug, т. Е. (?P<slug>[A-Za-z0-9_\-]+).

1

Django останавливается по первому шаблону URL, который соответствует. Это означает, что ваш blog вид, который просто ищет один или несколько символов, будет интерпретировать ваш mysite.com/membres URL-адрес, чтобы быть в блоге с помощью пули membres.

Чтобы исправить это, попробуйте поменять порядок ваших шаблонов URL:

urlpatterns = patterns('blog.views', 
    ... 
    url(r'^membres$', 'membres', name='membres'), 
    url(r'^(?P<slug>.+)$', 'blog', name='blog'), 
) 

В общем, вы хотите, чтобы ваши наиболее общие закономерности в нижней части именно по этой причине.

Смежные вопросы