2016-05-29 2 views
0

Мой url в Django содержит пробелы, что не совсем то, что я хочу в этом случае. Я искал решение. Мне нужен какой-то urlencoding для URL. Я также видел slugify, но он, похоже, не работал.URL-адрес Django содержит нежелательные персонажи

<a href="{% url 'detail' title=example.label %}">view more</a> 

Теперь это перенаправляется на другой URL-адрес и задает пример.label в URL-адресе. Теперь это может быть любая строка, поэтому она содержит пробелы и символы.

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

Edit: Или вы можете создать простой фильтр, чтобы вернуть правильный путь

@register.filter(name='detailurl') 
def detailurl(value): 
    value = value.replace(' ', '%20').lower() 
    return reverse('detail', kwargs={'title': value}) 

В каталоге приложений создайте подкаталог templatetags и поместите фильтр в.:

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

Спасибо, будет defenitely попробуй что одно – dnsko

Смежные вопросы