我正在尝试创建一个依赖于从函数传递的值的动态超链接:
{% 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/
代替?
答案 0 :(得分:7)
答案 1 :(得分:2)
有这个内置过滤器。
http://docs.djangoproject.com/en/dev/ref/templates/builtins/#urlencode
虽然你应该使用其中一个
http://docs.djangoproject.com/en/dev/ref/models/fields/#slugfield
答案 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 %}