我正在尝试将 slug 添加到我的 django 应用程序中的 url,就像 SO 一样。
目前,我的页面可以使用这样的 url 正常工作:
http://example.com/foo/123/
我想像这样添加“slugified”网址:
http://example.com/foo/123/foo-name-here
我可以让它正常工作,只需修改 urlconf 并向视图函数添加一个一次性值:
#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
用蛞蝓浏览网址就可以了。
但是,我的问题是当我使用@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))
,但我正在尝试使永久链接正常工作,以便我的 URL 仅在一个地方定义。我究竟做错了什么?