【问题标题】:In django, when submitting a new form, how do i redirect to the submission?在django中,提交新表单时,我如何重定向到提交?
【发布时间】:2015-07-09 16:25:38
【问题描述】:

表单正在提交博客文章并在提交时重定向到索引页面。

如何更改它以使其重定向到新提交的博客文章

views.py

def post(request, post_url):
    single_post = get_object_or_404(Post, title=post_url.replace('_', ' '))
    popular_posts = Post.objects.order_by('-views')[:5]
    single_post.views+=1
    single_post.save()
    t=loader.get_template('blog/post.html')
    c = Context({'single_post': single_post, "popular_posts":popular_posts, })
    return HttpResponse(t.render(c))

def add_post(request):
context = RequestContext(request)
if request.method =='POST':
    form = PostForm(request.POST, request.FILES)
    if form.is_valid():
        form.save(commit=True)
        return redirect(index)
    else:
        print form.errors
else:
    form = PostForm()
return render_to_response('blog/add_post.html', {'form':form}, context)

【问题讨论】:

    标签: python django forms


    【解决方案1】:

    考虑到您的博客文章网址格式为:

    url(r'^blog/(?P<blog_id>[0-9]{4})/$', views.blog_detail, name='blog_detail'),
    

    那么,

     def add_post(request):
        context = RequestContext(request)
        if request.method =='POST':
            form = PostForm(request.POST, request.FILES)
            if form.is_valid():
                obj = form.save(commit=True)
                return HttpResponseRedirect(reverse('blog_detail', obj.id))
            else:
                print form.errors
        else:
            form = PostForm()
        return render_to_response('blog/add_post.html', {'form':form}, context)
    

    【讨论】:

      【解决方案2】:

      检查 django 模型对象的 get_absolute_url 方法

      def add_post(request):
          context = RequestContext(request)
          if request.method =='POST':
              form = PostForm(request.POST, request.FILES)
              if form.is_valid():
                  form.save(commit=True)
                  return redirect(form.instance.get_absolute_url())
              else:
                  print form.errors
          else:
              form = PostForm()
      
           return render_to_response('blog/add_post.html', {'form':form}, context)
      

      【讨论】:

        猜你喜欢
        • 2018-07-21
        • 2014-08-22
        • 2019-07-20
        • 2020-07-14
        • 1970-01-01
        • 1970-01-01
        • 2016-03-15
        • 2019-09-07
        • 1970-01-01
        相关资源
        最近更新 更多