Django - 如何让永久链接与“一次性”slug 一起使用

2024-01-12

我正在尝试将 slugs 添加到我的 django 应用程序中的 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

使用 slug 访问 url 效果很好。

但是,我的问题是当我使用时@models.permalink.

For my 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 只定义在一处。我究竟做错了什么?


要检查一件事,因为我也遇到了这个问题:

(?P<name_slug>\w+)

slugify 是否在任何地方添加连字符?如果是这样,正则表达式将不匹配,连字符是非单词字符。修复使用[\w-]+或类似的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django - 如何让永久链接与“一次性”slug 一起使用 的相关文章

随机推荐