2016-05-29 92 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

相關問題