Django网址包含不需要的字符

时间:2016-05-29 17:54:38

标签: django

我在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?感谢所有帮助!

1 个答案:

答案 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>

More about custom filters here