2016-05-29 65 views
0

Django中的我的url包含空格,这不正是我想要的情况。我寻找了一个解决方案。我需要一些url的urlencoding。我也看到了slugify,但它似乎没有工作。Django url包含不需要的字符

<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'), 
] 

我将如何运用某种编码,这样的URL可能看起来像example/an%20example%title/,而不是像example/An Example Title现在呢?所有帮助表示赞赏!

回答

0

Django有一个标准模型方法get_absolute_url()。我会为您的示例模型定义它,以便您可以在模板中使用

<a href="{{ example.get_absolute_url }}">view more</a> 

在模型中,你可以做所有的替换和复杂的URL路径结构,使用Python

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}) 

在您的应用程序目录中,创建一个子目录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

+0

的事情是:我不会在这个时候使用任何模型。这是一堆API调用。主页面列出了多个项目,旁边有一个按钮以查看更多内容。没有把这个功能放在模型上的任何方法? – dnsko

+0

然后我会建议做一个简单的过滤器。我将它添加到我的答案中。 – C14L

+0

谢谢,会有勇气尝试那个 – dnsko