How to redirect to previous page in Django after POST request

前端 未结 4 1843
自闭症患者
自闭症患者 2020-12-07 19:03

I face a problem which I can\'t find a solution for. I have a button in navbar which is available on all pages and it is a button responsible for creating some content.

4条回答
  •  情书的邮戳
    2020-12-07 19:26

    My favorite way to do that is giving the request.path as GET parameter to the form. It will pass it when posting until you redirect. In Class-Based-Views (FormView, UpdateView, DeleteView or CreateView) you can directly use it as success_url. Somewhere i read that it's bad practise to mix GET and POST but the simplicity of this makes it to an exception for me.


    Example urls.py:

    urlpatterns = [
        path('', HomeView.as_view(), name='home'),
        path('user/update/', UserUpdateView.as_view(), name='user_update'),
    ]
    

    Link to the form inside of the template:

    Update User
    

    Class-Based-View:

    class UserUpdateView(UpdateView):
        ...
        def get_success_url(self):
            return self.request.GET.get('next', reverse('home'))
    

    In your function based view you can use it as follows:

    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()
                next = request.GET.get('next', reverse('home'))
                return HttpResponseRedirect(next)
    
        args = {}
        args.update(csrf(request))
        args['username'] = request.user.username
        args['form'] = AdverForm()
        args['uw'] = uw
        return  render_to_response('createadv.html', args)
    

提交回复
热议问题