Django的 - 我怎样才能永久链接有“一次性”蛞蝓工作(Django - how can I g

2019-08-18 04:56发布

我想蛞蝓添加到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))但我想获得永久的工作,使我的网址只在一个地方定义。 我究竟做错了什么?

Answer 1:

有一点需要检查,因为我也遇到了这个问题:

(?P<name_slug>\w+)

被slugify加连字符地方? 如果是这样的正则表达式不匹配,hypens是一个非单词字符。 要解决使用[\w-]+或相似。



文章来源: Django - how can I get permalink to work with “throwaway” slug