在具有空格的对象的 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 模板中创建超链接的主要内容,如果未能解决你的问题,请参考以下文章