我正在开发一个 Django 模板,该模板显示来自 Haystack 搜索的搜索结果(我的模板基于http://django-haystack.readthedocs.org/en/latest/tutorial.html#setting-up的代码-观点)。问题是查询可以包含空格(例如,我搜索“莱姆病”),而这些空格在 URL 中没有得到正确处理。
如果我搜索“莱姆病”,这是我得到的 URL:
http://www.site.com/search/?q=lyme+disease&type=All+Types
没关系。这没什么不好。但是,我正在使用分页,并且我已经建立了下一个和上一个链接。我想要的是让 Next 指向:
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
我用来生成 Next 链接的模板代码是这样的:
{% 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
模板标签,但它们不会转义空格。我知道有一种调用str.replace
模板的 hacky 方法,但是有没有更好的官方方法来解决这个问题?
[编辑]
我忘了提到那urlencode
不起作用。我不知道为什么,但{{ query|urlencode }}
仍然包含空格。