Django在urlpattern更改后给出NoReverseMatch错误

2024-05-13 22:47:59 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的模板中,我为文本文章对象设置了如下URL:
<a href="{{texto.get_absolute_url}}">Text</a>其中,我的文本模型对象的get_absolute_url方法在models.py中定义如下:

def get_absolute_url(self):
    return reverse('viva.views.texto_completo', kwargs = {'anno': self.fecha_cr.strftime('%Y'),
                                                         'mes': self.fecha_cr.strftime('%m'),
                                                         'dia': self.fecha_cr.strftime('%d'),
                                                         'slug': self.slug})

urls.py中相关的urlpattern是这样的:

urlpatterns = patterns('',
    ...
    url(r'^(?P<anno>\d{{4}})/(?P<mes>\d{{2}})/(?P<dia>\d{{2}})/(?P<slug>[-\w]+)/$', texto_completo),
)

Django给我一个NoReverseMatch错误:

Reverse for 'viva.views.texto_completo' with arguments '()' and keyword arguments '{'anno': '2015', 'dia': '12', 'mes': '06', 'slug': u'jacarandas-walk-johannesburgo'}' not found. 1 pattern(s) tried: ['(?P<anno>\\d{{4}})/(?P<mes>\\d{{2}})/(?P<dia>\\d{{2}})/(?P<slug>[-\\w]+)']

这似乎很奇怪,因为以前的版本工作得很好。在工作版本中get_absolute_url定义为:

def get_absolute_url(self):
    some logic to figure out 'tema' value
    ...
    return reverse('viva.views.texto_completo', kwargs = {'tema': tema,
                                                         'anno': self.fecha_cr.strftime('%Y'),
                                                         'mes': self.fecha_cr.strftime('%m'),
                                                         'dia': self.fecha_cr.strftime('%d'),
                                                         'slug': self.slug})

图案是这样的:

urlpatterns = patterns('',
    ...
    url(r'^(?P<tema>[-\w]{{1,{l1}}})/(?P<anno>\d{{4}})/(?P<mes>\d{{2}})/(?P<dia>\d{{2}})/(?P<slug>[-\w]+)/$'.format(l1=settings.MAX_LENGTH_TEMA), texto_completo),
)

现在我似乎无法让新版本工作。有什么好处


Tags: selfurlgetcrslugdiaannostrftime