将带有空格的标题转换为url友好的标题,例如stackoverflow标题

时间:2013-10-07 14:12:16

标签: django django-models django-templates

我有一个博客应用程序,其中包含最新帖子的列表。现在,列表项应链接到其内容。我的问题(similar post)是如果标题有一些空格我会得到一个带空格的网址,如果我使用:

<a href="{{  i.id  }}/{{  i.title  }}">{{ i.title }}

在我的模板中。我可以使用额外的URLField,但我不想手动创建友好的网址标题。这样做的常见方法是什么?

我的models.py

class Post(models.Model):
    title = models.CharField(max_length=100)
    ...

    def __unicode__(self):
        return self.title

我的view.py

def recentlyBlogged(request):
    lastPosts = Post.objects.filter(publication__gt = datetime.now() - timedelta(days=30))
    return render(request, "blog/blog.html", {'Posts': lastPosts})

我的模板

{% for i in Posts %}
    <ul id="latestPostsList">
        <li class="latestPostsListItem"><a href="{{  i.id  }}/{{  i.title  }}">{{ i }}</a></li>
{% endfor %}
    </ul>

1 个答案:

答案 0 :(得分:6)

您正在寻找slug

试试这个

from django.template.defaultfilters import slugify
class Post(models.Model):
    title = models.CharField(max_length=100)
    ...

    def __unicode__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('post_url', args=(slugify(self.title), ))

并在模板中

<a href="{{  i.get_absolute_url }}">{{ i.title }}</a>

您可能还必须相应地修改urls.py

url(r'post_url/(?P<slug>[\w-]+)/', view_name, name="post_url")