我正在更新应用中的get_absolute_url定义,但由于某种原因它停止了工作。一直无法弄明白为什么。更奇怪的是,我的本地机器上的一切正常,但在服务器上无效(Webfaction)。
原始代码,有效:
def get_absolute_url(self):
return "/blog/%s/%02d/%02d/%s/" % (self.publication_date.year, self.publication_date.month, self.publication_date.day, self.URL)
我把它改为:
def get_absolute_url(self):
return reverse('blog-post', args=[
self.publication_date.year,
self.publication_date.month,
self.publication_date.day,
self.URL
])
它默默地失败了。当我点击管理员中的“在网站上查看”链接时,我收到了此错误:
Reverse for 'blog-post' with arguments '(2013, 7, 19, 'some-test-slug')' and keyword arguments '{}' not found.
我尝试使用关键字参数:
def get_absolute_url(self):
return reverse('blog-post', kwargs={
'year': self.publication_date.year,
...
})
......但这没有任何影响。
请记住,奇怪的是,在我的当地环境中一切都很好。
为此使用Django 1.3.7,FWIW。
感谢您的帮助。
这是urls.py:
urlpatterns = patterns('blog.views',
...
url(r'^(?P<year>\d{4})/(?P<month>\d{2})/(?P<day>\d{2})/(?P<slug>[a-zA-Z0-9_.-]+)/$', 'post', name='blog-post'),
...
)
答案 0 :(得分:1)
没有urls.py
我只能猜测,但很可能它需要两位数的月和日标识符,而在某些情况下,您只提供一位数字。无论如何 - 这是您的旧get_absolute_url
代码之间的差异 - 在旧代码月份和日期编号中,如果需要填充0。
试试这个:
def get_absolute_url(self):
return reverse('blog-post', args=[
self.publication_date.year,
self.publication_date.strftime('%m'),
self.publication_date.strftime('%d'),
self.URL
])