我在Django中的网址包含空格,在这种情况下,这并不是我想要的。我找了一个解决方案。我需要某种urlencoding的网址。我也见过slugify
,但它似乎没有用。
<a href="{% url 'detail' title=example.label %}">view more</a>
现在重定向到另一个url并在url中设置example.label。现在可以是任何字符串,因此它包含空格和字符。
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^$', search,
name='search'),
url(r'^example/(?P<title>.+)/$', detail,
name='detail'),
]
我如何应用某种编码,以便网址看起来像example/an%20example%title/
而不是现在的example/An Example Title
?感谢所有帮助!
答案 0 :(得分:0)
Django有一个标准的模型方法get_absolute_url()
。我会为你的Example模型定义它,以便你可以使用
<a href="{{ example.get_absolute_url }}">view more</a>
在模板中。
在模型上,您可以使用Python
完成所有替换和复杂的URL路径构造def get_absolute_url(self):
title = self.title.replace(' ', '%20').lower()
return reverse('detail', kwargs={'title': title})
编辑或者您可以创建一个简单的过滤器来返回正确的路径
@register.filter(name='detailurl')
def detailurl(value):
value = value.replace(' ', '%20').lower()
return reverse('detail', kwargs={'title': value})
在您的app目录中,创建一个子目录templatetags
并将过滤器放入example_tags.py
:
exampleapp/templatetags/__init__.py
exampleapp/templatetags/example_tags.py
要使用过滤器,您需要先加载命名空间(文件名)
{% load example_tags %}
<a href="{{ example.label|detailurl }}">view more</a>