我目前正在使用Django的redirect()方法构建要重定向到的URL。我不想对URL进行硬编码,所以我一直这样做:
return redirect('main.views.home', home_slug=slug)
这让我有点像:
/家庭/测试-123 /
但是我正在为特定的网址添加一些客户端跟踪,所以我想在最后使用锚点来识别像这样的首次用户访问:
/家庭/测试-123 /#第一
如果没有在redirect()方法中对上述URL进行硬编码,是否有更优雅的替代方法可以将锚点附加到构建的URL的末尾?
谢谢, ģ
答案 0 :(得分:22)
redirect()
accepts URL,您可以使用reverse()
to get one并附加哈希部分:
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))
答案 1 :(得分:8)
[仅在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'),
答案 2 :(得分:0)
只需使用:
url(r'^app/#/welcome/$', SomeView.as_view(), name='welcome'),
from django.utils.encoding import uri_to_iri
uri_to_iri(urlresolvers.reverse('welcome'))