Django:表单值以单步重定向到url

时间:2013-01-23 08:35:00

标签: django django-forms

如何从表单中获取值,并在一步中重定向到名为MyView的视图,如MyView/formvalue1/formvalue2?我有一个解决方案,但我认为这不是正确的方法。

详细说明:

我正在尝试使用Django评级,如教程

中所述
urlpatterns = patterns('',
    url(r'rate-my-post/(?P<object_id>\d+)/(?P<score>\d+)/', AddRatingFromModel(), {
        'app_label': 'blogs',
        'model': 'post',
        'field_name': 'rating',
    }),
)

我有一个VoteForm视图,它呈现VoteForm.html。在VoteForm.html中,表单操作应该是什么?如果我将它/ rate-my-post /然后我不能正则表达式,那么url就像rate-my-post/?objectid=x&score=y,然后它不能正则表达它,因为Django在?之后没有看到url。

我的解决方案是:我创建了另一个名为垃圾的视图,表单现在发送给它,垃圾视图获取表单值,然后垃圾将HttpResponseRedirect重定向到rate-my-post。

1 个答案:

答案 0 :(得分:2)

您应该使用相同的视图(和相同的URL)来渲染表单,以用于处理表单(请参阅django docs中的此示例)。成功处理表单后,使用reverse重定向到您需要的页面。

像 -

def vote_form(request):
    if request.method == 'POST': # If the form has been submitted...
        form = VoteForm(request.POST) # A form bound to the POST data
        if form.is_valid(): # All validation rules pass
            # Process the data in form.cleaned_data
            # ...
            return HttpResponseRedirect(reverse('my_view_name', 
                                                kwargs={'objectid':x, 'score': y}))
    else: # We're just rendering the html form
        form = VoteForm() # An unbound form

    return render(request, 'vote.html', {
        'form': form,
    })