Я пытаюсь создать дружественные URL-адреса SEO, где все пробелы заменены дефисом.Использование Slugify в URL-адресах Django
Это, как я 'slugifying' URL-адрес с помощью slugify в Django шаблоны
<a href="{% url 'dj' dj_name=dj.name|slugify %}">
Вот мой urls.py
url(r'^top100/(?P<dj_name>[a-zA-Z0-9 \'&-]+)/$', views.dj, name='dj')
Это мой взгляд
def dj(request, dj_name):
dj = DJ.objects.get(name=dj_name)
dj_song_list = Song.objects.filter(artist=dj, duplicate=False).order_by('-votes', '-release_date')
return render(request, 'hunt/dj.html', {'dj_song_list': dj_song_list, 'dj':dj}
Теперь %20
в URL-адресах изменился на -
, но я получаю ошибку DJ matching query does not exist.
Также это игнорирует &
в имени ди-джея. Например, он изменяет адрес для DJ Above & Beyond
на www.example.com/top100/above-beyond
+1 правильный ответ и хорошее форматирование – Thomas
@Maxime - Хорошее объяснение, я должен сказать. У меня есть сомнения. Получая новостной объект из модели, например 'news = get_object_or_404 (News, slug = slug)', не требуется ли запрашивать поле 'slug', занимает много времени? Я имею в виду, что он не индексирован, и даже если мы его индексируем, писать запросы будут тяжелыми. Разве это не так? Поправьте меня если я ошибаюсь. – PythonEnthusiast
@PythonEnthusiast Если я правильно помню свои курсы последипломного обучения в DB, индексирующие строки используют хэши в индексе B-дерева. Таким образом, он добавляет относительно небольшую стоимость вычисления хэша по сравнению с целыми числами. Однако, если вы не указали индекс в поле 'slug', это действительно медленнее, чем запрос первичного ключа, когда ваша таблица получает (десятки?) Тысяч записей. Но это еще одна проблема, которую вы должны знать, когда ваша база данных начинает становиться больше, чем случайный блог с менее чем 100 статьями. –