在具有空格的对象的django模板中创建超链接

时间:2010-03-17 22:30:20

标签: html django templates hyperlink

我正在尝试创建一个依赖于从函数传递的值的动态超链接:

{% for item in field_list %}
    <a href={% url index_view %}{{ item }}/> {{ item }} </a> <br>
{% endfor %}

问题是field_list中的一个项目是“Hockey Player”。由于某种原因,链接会丢弃空格后的所有内容,因此它会在整个“冰球运动员”上创建超链接,但地址为

http://126.0.0.1:8000/Hockey

我怎样才能到达

http://126.0.0.1:8000/Hockey Player/

代替?

3 个答案:

答案 0 :(得分:7)

使用urlencode过滤器。

{{ item|urlencode }}

但你为什么要这个名字?您应该将适当的视图和PK或slug传递给url,这将自己创建一个合适的URL。

答案 1 :(得分:2)

答案 2 :(得分:2)

由于空格在网址中是非法的,

http://126.0.0.1:8000/Hockey Player/

是不可接受的。 urlencode过滤器将简单地用%20替换空间,这是丑陋/不优雅的,即使它确实完成了工作。一个更好的解决方案是在模型上使用“slug”字段来表示标题字段的清理版本(我假设它被称为标题字段)。您希望得到一个干净的URL,如:

http://126.0.0.1:8000/hockey_player/

为了实现这一目标,请在模型中使用以下内容:

class Player(models.Model):
    title = models.CharField(max_length=60)
    slug = models.SlugField()
    ...

如果您希望在管理员中预先填充slug字段,请在admin.py中使用以下内容:

class PlayerAdmin(admin.ModelAdmin):
    prepopulated_fields = {"slug": ("title",)}
....

admin.site.register(Player,PlayerAdmin)

现在当您在管理员中输入新玩家时,如果您为标题键入“Hockey Player”,则Slug字段将自动变为“hockey_player”。

然后在模板中使用:

{% for item in field_list %}
    <a href={% url index_view %}{{ item.slug }}/> {{ item }} </a> <br>
{% endfor %}