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

Posted

技术标签:

【中文标题】在具有空格的对象的 django 模板中创建超链接【英文标题】:Create hyperlink in django template of object that has a space 【发布时间】:2011-01-28 19:28:30 【问题描述】:

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

% 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/

改为?

【问题讨论】:

【参考方案1】:

使用urlencode 过滤器。

 item|urlencode 

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

【讨论】:

这里是 Django 新手。你可以再详细一点吗?我有点明白你的建议,但我不完全在那里。 . . 正如文档所说。写一个视图,放到urlconf中,使用url。 docs.djangoproject.com/en/dev/ref/templates/builtins/#url【参考方案2】:

由于 URL 中的空格是非法的,

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 %

【讨论】:

【参考方案3】:

有这个内置过滤器。

http://docs.djangoproject.com/en/dev/ref/templates/builtins/#urlencode

虽然你应该使用其中之一

http://docs.djangoproject.com/en/dev/ref/models/fields/#slugfield

【讨论】:

谢谢,虽然我不确定我是否了解 slugfield 将如何使用或提供帮助。

以上是关于在具有空格的对象的 django 模板中创建超链接的主要内容,如果未能解决你的问题,请参考以下文章

在python中创建超链接

在Textview中创建超链接[重复]

如何在 kivy 中创建超链接?

通过绑定在TextBlock中创建超链接

在 Django 模板中创建排序选项

如何在django创建模板中创建对象时自动插入当前用户?