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

Ulf*_*orm 1 django django-templates django-models

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

<a href="{{  i.id  }}/{{  i.title  }}">{{ i.title }}
Run Code Online (Sandbox Code Playgroud)

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

我的models.py

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

    def __unicode__(self):
        return self.title
Run Code Online (Sandbox Code Playgroud)

我的view.py

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

我的模板

{% for i in Posts %}
    <ul id="latestPostsList">
        <li class="latestPostsListItem"><a href="{{  i.id  }}/{{  i.title  }}">{{ i }}</a></li>
{% endfor %}
    </ul>
Run Code Online (Sandbox Code Playgroud)

kar*_*ikr 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), ))
Run Code Online (Sandbox Code Playgroud)

在模板中

<a href="{{  i.get_absolute_url }}">{{ i.title }}</a>
Run Code Online (Sandbox Code Playgroud)

您可能还需要urls.py相应地进行修改

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