这个网址出了什么问题?

时间:2011-02-06 19:43:46

标签: python django

我有一个root urls.py和一个app 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)),
)

在我的应用网址中,我有以下内容

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',)'和关键字参数'{}'未找到。*

无论我做什么,我都会遇到这个错误。我尝试捕获id,没有任何工作,我不知道为什么,我之前已经多次使用url所以如果我遗漏了一些明显的东西,我真的很困惑。有人在这看错了吗?

由于

杰夫

2 个答案:

答案 0 :(得分:2)

我认为您需要从您的urlconf中删除$,其中包含应用的网址。您也可以删除^

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遇到include(),它会发生错误   关闭匹配的URL的任何部分   直到那一点并发送   保留字符串到包含的   URLconf用于进一步处理。

答案 1 :(得分:2)

做这样的事情:

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)),
)

否则(就像Reiner帖子一样)你将使第一个正则表达式成为“全部捕获”而/ admin将永远不会匹配。

您也可以在“全部捕获”之前放置管理正则表达式,但是如果您有像“admin”这样的slug会怎么样?这就是为什么我建议在第一级使用/<slug>/的网址方案。相反,请使用/<object-type>/<slug>/,这将为将来的其他事情腾出空间。