2012-09-24 83 views
0

我正在寫一個小博客應用程序,希望它的條目可以通過title-name和id的組合來訪問。django url-tag和裝飾的網址

Expression: ^blog/([\d\w\-_]+)\-(\d+)/$ 
Example URL: localhost:8000/blog/django-is-awesome-231/ 

第一部分是通過將博客條目的標題都爲小寫,並與-代替空格和特殊字符生成。

我想知道如何從一個條目反轉這樣的網址。

{% for entry in entries %} 
    <li><a href="{% url 'blog.views.display', entry.title entry.id %}">{{ entry.title }}</a></li> 
{% endfor %} 

但它告訴我沒有發現反向匹配。

感謝,


我只是想這樣說:

def get_mangled_name(self): 
    """ Returns the mangled name of the entry. """ 
    title = self.title.lower().replace(' ', '-') 
    title = ''.join(filter(lambda x: x in string.letters, title)) 
    if title.endswith('-'): 
     title = title[:1] 
    return '%s-%d' % (title, self.id) 


<li><a href="{% url 'blog.views.display' entry.get_mangled_name %}">{{ entry.title }}</a></li> 

但它也不能工作。

+1

您可能想看看[get_absolute_url](https://docs.djangoproject.com/en/dev/ref/models/instances/?from=olddocs#get-absolute-url)規範URL的一個對象。這樣你可以按照你想要的方式格式化url,只需從你的模板中調用'href =「{{entry.get_absolute_url}}」''''' –

+0

在你的反向中有一個逗號,刪除並嘗試 – karthikr

回答

2

有一個slugify模板過濾器可以將標題轉換爲段落。所以,你可以寫你的模板代碼,如:

{% url 'blog.views.display', entry.title|slugify entry.id %} 

然而,任何你正在處理蛞蝓的時候,你實際上應該有你的模型slug場永久保存價值。至少,你應該採取César的建議,而不是在get_absolute_url