我有一个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所以如果我遗漏了一些明显的东西,我真的很困惑。有人在这看错了吗?
由于
杰夫
答案 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>/
,这将为将来的其他事情腾出空间。