Django redirect() with anchor (#) parameters
[Only working up until Django 1.8, not functional in Django 1.9+, see comments!]
You can add an anchor into the regular expression in urls.py. Here is an example from a sample forum app which will jump to the desired post in a thread.
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'),
redirect()
accepts URL, you could use reverse()
to get one and appending hash part:
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})))
Also, there is a shortcut django.shortcuts.resolve_url
which works like:
'{}#first'.format(resolve_url('main.views.home', home_slug=slug))
EDIT for Django 2.0, use:
from django.urls import reverse