TM.*_*TM. 4 python django permalinks django-urls
我正试图在我的django应用程序中添加slug到url,就像SO一样.
目前,我的网页可以正常使用这样的网址:
http://example.com/foo/123/
Run Code Online (Sandbox Code Playgroud)
我想像这样添加'slugified'网址:
http://example.com/foo/123/foo-name-here
Run Code Online (Sandbox Code Playgroud)
通过简单地修改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
Run Code Online (Sandbox Code Playgroud)
用slug visting url工作得很好.
但是,我的问题是我正在使用的时候@models.permalink.
对于我的Foo模型,我曾经有以下,它工作得很好:
@models.permalink
def get_absolute_url(self):
return ('foo_detail', [str(self.id),])
Run Code Online (Sandbox Code Playgroud)
但是,在我更改之后,每当我调用{{ 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),
})
Run Code Online (Sandbox Code Playgroud)
请注意,如果我print slugify(self.name)在返回之前添加一个,那么在控制台中显示的细节名称就好了.
{{ foo.get_absolute_url }}在我的模板中调用时,结果总是一个空字符串,我没有收到任何错误.
我知道我可以用这个替换方法return '/foo/%s/%s' % (str(self.id), slugify(self.name)),但是我试图让永久链接正常工作,以便我的URL只在一个地方定义.我究竟做错了什么?
要检查的一件事,因为我也遇到了这个问题:
(?P<name_slug>\w+)
Run Code Online (Sandbox Code Playgroud)
slugify在任何地方添加连字符?如果是这样,正则表达式将不匹配,则超量是非单词字符.修复使用[\w-]+或类似.
| 归档时间: |
|
| 查看次数: |
1896 次 |
| 最近记录: |