Я работаю над шаблоном Django, который отображает результаты поиска из поиска в Haystack (я основываю свой шаблон с кодом на http://django-haystack.readthedocs.org/en/latest/tutorial.html#setting-up-the-views). Проблема в том, что запросы могут содержать пробелы (например, я ищу «болезнь Лайма»), и эти пробелы не обрабатываются правильно в URL-адресах.Работа с пробелами в URL-адресах в шаблонах Django
Если я ищу "болезнь Лайма", это URL я получаю:
http://www.site.com/search/?q=lyme+disease&type=All+Types
Это нормально. В этом нет ничего плохого. Тем не менее, я использую разбивку на страницы, и у меня есть следующие и предыдущие ссылки, которые я создаю. Я хочу, чтобы следующий пункт:
http://www.site.com/search/?q=lyme+disease&type=All+Types&page=2
Однако, это не то, что происходит. Ссылка я получаю это:
http://www.site.com/search/?q=lyme disease&type=All Types&page=2
код шаблона Я использую для создания ссылки Далее это:
{% if page.has_next %}<a href="?q={{ query }}&type={{ request.GET.type }}&page={{ page.next_page_number }}">{% endif %}Next »{% if page.has_next %}</a>{% endif %}
Мой вопрос заключается в следующем: как я могу избежать query
и request.GET.type
, так что пробелы преобразуются обратно в +? Я пробовал теги шаблона escape
и force_escape
, но они не избегают пробелов. Я знаю there's a hacky way to call str.replace
in a template, но есть ли лучший, официальный способ решить эту проблему?
Я забыл упомянуть, что urlencode
не работает. Я не уверен, почему, но {{ query|urlencode }}
все еще содержит пробелы.
Я думаю, вы должны обновить вопрос отметить, что 'urlencode' фильтр не работает. –
это очень странно :). Просто выстрел в темноте, действительно ли имеет значение 'request.GET.type | safe | urlencode'? – karthikr
Нет, это тоже не работает. – Geoff