我想蛞蝓添加到URL在我的Django应用程序,就像也是如此。
目前,我有工作得很好,像这样一个URL的网页:
http://example.com/foo/123/
我想补充“slugified”的URL地址,如下所示:
http://example.com/foo/123/foo-name-here
我可以让它工作得很好,通过简单修改URL配置和添加暴殄天物值到视图功能:
#urls.py
ulpatterns = patterns('project.app.views',
url(r'^foo/(?P<foo_id>\d+)/(?P<name_slug>\w+)/$', 'foo_detail', name='foo_detail'),
)
#views.py:
def foo_detail(request, foo_id, name_slug):
# stuff here, name slug is just discarded
Visting与塞的URL工作得很好。
然而,当我使用我的问题是@models.permalink
。
对于我的Foo
模型,我曾经有过以下,这只是正常工作:
@models.permalink
def get_absolute_url(self):
return ('foo_detail', [str(self.id),])
然而,我的变化后,每当我叫{{ foo.get_absolute_url }}
在我的模板,结果始终是一个空字符串。
我曾尝试以下两种替代get_absolute_url
,都未工作:
from django.template.defaultfilters import slugify
# attempt 1
@models.permalink
def get_absolute_url(self):
return ('foo_detail', [str(self.id), slugify(self.name)])
# attempt 2
@models.permalink
def get_absolute_url(self):
return ('foo_detail', (), {
'foo_id': str(self.id),
'name_slug': slugify(self.name),
})
需要注意的是,如果我添加print slugify(self.name)
返回之前,slugified名没有显示在控制台就好了。
当调用{{ foo.get_absolute_url }}
在我的模板,结果始终是一个空字符串,我没有得到任何错误。
我知道我可以用替换法return '/foo/%s/%s' % (str(self.id), slugify(self.name))
但我想获得永久的工作,使我的网址只在一个地方定义。 我究竟做错了什么?