Что не так с этим URL? - PullRequest
       8

Что не так с этим URL?

1 голос
/ 06 февраля 2011

У меня есть root urls.py и приложение urls.py. В моем корне у меня есть это:

from django.conf.urls.defaults import *
from django.contrib import admin

admin.autodiscover()

urlpatterns = patterns('',
    (r'^$', include('realestate.properties.urls')),
    (r'^admin/', include(admin.site.urls)),
)

В URL моего приложения есть следующее

from django.conf.urls.defaults import *

urlpatterns = patterns('realestate.properties.views',
    url(r'^$', 'property_list', {'template_name': 'properties/property_list.html'}, name='property_list'),
    url(r'^(?P<slug>[-\w]+)/$', 'property_detail', { 'template': 'property_detail.html' }, name='property_details'),
)

Теперь в моем шаблоне есть ссылка на представление сведений, которое выглядит следующим образом:

{% url property_details property.slug %}

Каждый раз, когда я отображаю эту страницу, я получаю сообщение об ошибке:

* Поймано NoReverseMatch при рендеринге: обратное для 'property_details' с аргументами '(u'111-front-st',) 'и ключевыми словами аргументов' {} 'не найдено. *

Что бы я ни делал, я получаю эту ошибку. Я пытался захватить только идентификатор, и ничего не работает, я не уверен, почему, я использовал URL-адреса много раз прежде, поэтому я действительно запутался, если мне не хватает чего-то очевидного. Кто-нибудь видит здесь что-то не так?

Спасибо

Джеф

Ответы [ 2 ]

2 голосов
/ 06 февраля 2011

Сделайте что-то вроде этого:

from django.conf.urls.defaults import *
from django.contrib import admin

admin.autodiscover()

urlpatterns = patterns('',
    (r'^$', 'realestate.properties.views.property_list'),
    (r'^properties/', include('realestate.properties.urls')),
    (r'^admin/', include(admin.site.urls)),
)

В противном случае (например, sugested от Reiner s) вы сделаете первое регулярное выражение "catch all", и / admin никогда не будет соответствовать,

Вы также можете поместить регулярное выражение администратора перед вашим "catch all", но что произойдет, если у вас будет такой слаг, как 'admin'?Вот почему я бы посоветовал использовать схему URL с /<slug>/ на первом уровне.Вместо этого используйте /<object-type>/<slug>/, что освободит место для других вещей в будущем.

2 голосов
/ 06 февраля 2011

Я думаю, вам нужно удалить $ из вашего urlconf, куда вы включаете URL-адреса приложения. Возможно, вы тоже можете удалить ^.

urlpatterns = patterns('',
    (r'^', include('realestate.properties.urls')),
    (r'^admin/', include(admin.site.urls)),
)

http://docs.djangoproject.com/en/1.2/topics/http/urls/#including-other-urlconfs

Обратите внимание, что регулярные выражения в этот пример не имеет $ (символ совпадения конца строки), но сделать включить косую черту. Всякий раз, когда Django встречает включают (), это рубит вне зависимости от того, какая часть URL соответствует до этого момента и отправляет оставшаяся строка для включения URLconf для дальнейшей обработки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...