Создать гиперссылку в шаблоне django объекта с пробелом - PullRequest
4 голосов
/ 18 марта 2010

Я пытаюсь создать динамическую гиперссылку, которая зависит от значения, переданного функцией:

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

Проблема в том, что одним из элементов в field_list является «Хоккеист». По какой-то причине ссылка сбрасывает все после пробела, поэтому она создает гиперссылку на весь «Хоккеист», но адрес равен

http://126.0.0.1:8000/Hockey

Как мне заставить его перейти на

http://126.0.0.1:8000/Hockey Player/

вместо

Ответы [ 3 ]

7 голосов
/ 18 марта 2010

Используйте фильтр urlencode.

{{ item|urlencode }}

Но почему вы берете имя? Вы должны передать соответствующий вид и PK или slug на url, который сам создаст подходящий URL.

2 голосов
/ 18 марта 2010

Поскольку пробелы в 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».

В шаблоне вы должны использовать:

{% for item in field_list %}
    <a href={% url index_view %}{{ item.slug }}/> {{ item }} </a> <br>
{% endfor %}
2 голосов
/ 18 марта 2010

Есть этот встроенный фильтр.

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

Хотя вы должны использовать один из этих

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...