目前,我有一些页面可以很好地使用如下url:
http://example.com/foo/123/
我想添加“slugified”URL,如下所示:
http://example.com/foo/123/foo-name-here
我只需修改urlconf并向view函数添加一个一次性值,就可以让它正常工作:
#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
用slug访问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)
调用时
{{foo.get_absolute_url}
在我的模板中,结果总是一个空字符串,我没有得到任何错误。
我知道我可以用
return '/foo/%s/%s' % (str(self.id), slugify(self.name))