使用 get 方法的 FormView 不显示表单

FormView with get method doesn't show the form

感谢阅读:/

当我从视图中删除 "get" 时,表单有效,但当我将其放回去时,它不呈现。

URL 在浏览器: http://127.0.0.1:8000/activate?tpr=1140277&idpr=42

URLs:

url(r'^activate', Activation_vw.as_view(), name='activate')

查看:

class Activation_vw(FormView):
    template_name = 'activate.html'
    form_class = Activation_Form
    success_url = '/dashboard/'

    def get(self, request, *args, **kwargs):
        tokenProspect_v = request.GET.get('tpr')
        idProspect_v = request.GET.get('idpr')

        USER = USERS.objects.filter(
            id=idProspect_v).values('id', 'email', 'token')

        if int(tokenProspect_v) != int(USER[0]['token']):
            message = "Check the URL"
        else:
            message = USER[0]['email']

        context = {'msg': message}
        return self.render_to_response(context)

    def form_valid(self, form):
        # No code yet
        return super(Activation, self).form_valid(form)

表格:

class Activation_Form(forms.Form):
    email = forms.EmailField()
    password = forms.CharField(widget=forms.PasswordInput())

模板:

Hello, {{ msg }}
<form action="" method="POST"> 
    {%csrf_token%}
    {{ form.as_p }}
    <button type="submit">Activate</button>
</form>

它们在每个文件的顶部都有导入。

get 函数完美运行,我收到 tpridprform 没有收到,因此 form_valid 并且 success_url 也不起作用。

我怀疑我的 get 的 return 有问题,但无法弄清楚。

这是因为你的form没有在上下文中传递:

context = {'msg': message}
return self.render_to_response(context)

您可以使用 get_context_data 获取上下文并随时更新它:

context = self.get_context_data(msg=message)
return self.render_to_response(context)

这将从超级 class 调用 get_context_data 并将 form 添加到上下文中,同时添加 message.