我有一个博客应用程序,其中包含最新帖子的列表。现在,列表项应链接到其内容。我的问题(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>
答案 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")