django url-tag和装饰网址

时间:2012-09-24 14:42:13

标签: python django django-templates

我正在撰写一个小型博客应用,并希望通过title-name和id的组合来访问其条目。

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

第一部分是通过将博客条目的标题全部转换为小写并使用-替换空格和特殊字符来生成的。

我想知道如何从条目中撤消这样的URL。

{% 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 个答案:

答案 0 :(得分:2)

有一个slugify模板过滤器可以将标题转换为slug。因此,您可以编写模板代码,如:

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

但是,每当你处理slug时,你的模型上应该有一个slug字段来永久存储值。至少,您应该接受César的建议并在get_absolute_url中执行此操作。