get_absolute_url停止了工作?

时间:2013-10-13 19:11:43

标签: python django

我正在更新应用中的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'),
    ...
)

1 个答案:

答案 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
        ])