一尘不染

Django redirect() with anchor (#) parameters

django

我目前正在使用Django的redirect()方法来构造要重定向到的URL。我不想对URL进行硬编码,因此我一直在这样做:

return redirect('main.views.home', home_slug=slug)

这将我带到以下内容:

/ home / test-123 /

但是我为特定的URL添加了一些客户端跟踪,因此我想在最后使用锚来标识诸如首次用户访问之类的内容:

/ home / test-123 /#first

除了在redirect()方法中对上面的URL进行硬编码之外,还有没有更优雅的替代方法可以将锚点附加到构造的URL的末尾?


阅读 567

收藏
2020-04-03

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

对于Django 2.0进行编辑,请使用: from django.urls import reverse

2020-04-03