我面临一个问题,我找不到解决办法。我在导航栏中有一个按钮,在所有页面上都可以使用,它是一个负责创建一些内容的按钮。
与按钮链接的视图:
def createadv(request):
uw = getuw(request.user.username)
if request.method =='POST':
form = AdverForm(request.POST, request.FILES)
if form.is_valid():
form.instance.user = request.user
form.save()
return HttpResponseRedirect('/', {'username': request.user.username, 'uw': uw})
args = {}
args.update(csrf(request))
args['username'] = request.user.username
args['form'] = AdverForm()
args['uw'] = uw
return render_to_response('createadv.html', args)
如果你能看到现在我总是重定向到主页'/'后创建的内容,但我想回到我发起的内容创建的页面。
7条答案
按热度按时间ckocjqey1#
您可以在表单中添加
next
字段,并将其设置为request.path
。处理完表单后,可以重定向到此路径的值。template.html
views.py
如果我没记错的话,这大概就是
django.contrib.auth
对登录表单所做的。如果你通过一个中间页面,你可以通过querystring传递'next'值:
some_page.html
template.html
5gfr0r5j2#
您可以使用
HTTP_REFERER
值:请注意,如果客户端禁用发送引用信息(例如,使用私有/匿名浏览器窗口),则此操作将不起作用。在这种情况下,它将重定向到
/
。wwodge7n3#
你可以用这个
确保导入此
hjqgdpho4#
我最喜欢的方法是将request.path作为表单的GET参数。它会在发布时传递它,直到你重定向。在基于类的视图(FormView,UpdateView,DeleteView或CreateView)中,您可以直接将其用作success_url。我在某个地方读到过,混合使用GET和POST是不好的做法,但这种简单性对我来说是个例外。
示例urls.py:
链接到模板中的表单:
基于类的视图:
在基于函数的视图中,您可以按如下方式使用它:
anauzrmj5#
你可以用一个简单的一行程序JS轻松地做到这一点
这将带您返回到历史记录列表的上一页。如果您没有历史https://www.w3schools.com/jsref/met_his_back.asp
ux6nzvsh6#
使用
HTTP_REFERER
值:1.用于func
return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/'))
1.用于模板
<a href="{{request.META.HTTP_REFERER}}">Go Back</a>
sdnqo3pr7#
如果这有助于某人,我得到了这个在基于类的UpdateView中工作
模板
views.py
视图现在会将您重定向回您单击“更新/编辑”按钮的页面。任何URL查询参数也被保留。