Django redirect() с параметрами anchor (#)
В настоящее время я использую метод перенаправления Django() для создания URL-адресов для перенаправления. Я не хочу жестко указывать URL-адрес, поэтому я делаю это следующим образом:
return redirect('main.views.home', home_slug=slug)
Который принимает меня к чему-то вроде:
/дома/тест-123/
Но я добавляю отслеживание на стороне клиента для определенных URL-адресов, поэтому я хотел использовать привязки в конце, чтобы идентифицировать такие вещи, как первые посещения пользователей, такие как:
/дома/тест-123/# первая
Заканчивая жесткую кодировку вышеуказанного URL-адреса в методе redirect(), существует ли более элегантная альтернатива добавлению якоря в конец моих сконструированных URL-адресов?
Спасибо,
G
Ответы
Ответ 1
redirect()
принимает URL, вы можете использовать reverse()
для получить один и добавить хэш-часть:
from django.core.urlresolvers import reverse
return redirect(reverse('main.views.home', kwargs={'home_slug':slug}) + '#first')
# or string formatting
return redirect('{}#first'.format(reverse('main.views.home', kwargs={'home_slug':slug})))
Кроме того, есть ярлык django.shortcuts.resolve_url
, который работает как:
'{}#first'.format(resolve_url('main.views.home', home_slug=slug))
Ответ 2
[Только работа до Django 1.8, не работающего в Django 1.9+, см. комментарии!]
Вы можете добавить привязку в регулярное выражение в urls.py. Вот пример из примера приложения для форума, которое переместится на нужную запись в потоке.
views.py
return redirect(post_list,
slug=post.thread.slug,
page=1,
anchor='post_{0}'.format(post.id)
)
urls.py
url(r'^thread/(?P<slug>[-\w]+)/(?P<page>[0-9]+)/#(?P<anchor>[-_\w]+)$', post_list, name='forum_view_thread'),
url(r'^thread/(?P<slug>[-\w]+)/(?P<page>[0-9]+)/$', post_list, name='forum_view_thread'),
url(r'^thread/(?P<slug>[-\w]+)/$', post_list, name='forum_view_thread'),