【问题标题】:My form is showing multiple times on template我的表单在模板上多次显示
【发布时间】:2020-07-10 04:23:41
【问题描述】:

我希望两个不同的表单在同一个模板中,但第一个表单显示两次而不是第二个,此外,我不知道 Password no set 建议是否会消失,请帮忙?

模板

  <div class="tab-pane container p-0 active" id="home1">
                                  <form method="POST" action="#" id="datosForm" > {% csrf_token %}
                                    <p>Por favor, no dejes ningún campo en blanco.
                                      {{ form.as_ul }}
                                    <button class="btn btn-primary py-1 px-2" type="submit" name="datosForm"> Save </button>
                                    </p>
                                  </form>
                                  </div>
                                  <div class="tab-pane container p-0 fade" id="home2">
                                      <form method="POST" action="#" id="contraForm"> {% csrf_token %}
                                         <p>Por favor, llena los siguientes campos para cambiar tu contraseña.
                                           {{form.as_ul }}
                                             <button class="btn btn-primary py-1 px-2" type="submit" name="contraForm" > Save </button>
                                          </p>
                                      </form>
                                  </div>

views.py

def  profileedit_view(request):
form= PerfilEditadoForm(request.POST or None)
if request.method== 'POST'and 'datosform' in request.POST:
    form.instance = request.user
    if form.is_valid():
        form.save()
        return redirect('profileedit')
    else:
        form= PerfilEditadoForm(instance=request.user)
        args= {'form': form}
        return render(request, 'profileedit.html', args)
context = {
    'form': form
}
return render(request, "profileedit.html", context)
def change_password_view(request):
if request.method == 'POST' and 'contraform' in request.POST:
    form = PasswordChangeForm(request.user, request.POST)
    if form.is_valid():
        user = form.save()
        update_session_auth_hash(request, user)  # Important!
        messages.success(request, 'Contraseña cambiada con éxito')
        return redirect('profileedit')
    else:
        messages.error(request, 'Ha ocurrido un error.')
else:
    form = PasswordChangeForm(request.user)
context = {
    'form': form
}
return render(request, 'profileedit.html', context)

【问题讨论】:

  • 你在模板中多次渲染{{form.as_ul }}
  • 是的,对不起,我以为它调用了第二种形式,我可以写什么来代替?
  • 只需给这两个表单取一个不同的名称(如form1form2),然后将它们都传递给模板,然后使用{{ form1.as_ul }}{{ form2.as_ul }} 渲染它们。
  • 好的...我猜这很奇怪...但是现在没有任何表格显示,例如,一个都没有。
  • 但你的上下文是context = {'form1': some_form, 'form2': some_form2}?

标签: python html django forms django-forms


【解决方案1】:

在模板中你写了两次 {{form.as_ul }}。 所以你会看到它两次。它不取决于表单中有哪个字段,而是取决于您在模板中呈现的表单。

【讨论】:

    【解决方案2】:

    试试这个:

    views.py

    def  profileedit_view(request):
    profile_edit= PerfilEditadoForm(request.POST or None)
    if request.method== 'POST'and 'datosform' in request.POST:
        profile_edit.instance = request.user
            if profile_eidt.is_valid():
            profile_edit.save()
            return redirect('profileedit')
    else: 
            profile_edit= PerfilEditadoForm(instance=request.user)
    
    context = {
    'profile_edit': profile_edit
    }
    return render(request, "profileedit.html", context)
    
    def change_password_view(request):
    if request.method == 'POST' and 'contraform' in request.POST:
        form = PasswordChangeForm(request.user, request.POST)
        if form.is_valid():
            user = form.save()
            update_session_auth_hash(request, user)  # Important!
            messages.success(request, 'Contraseña cambiada con éxito')
            return redirect('profileedit')
    else:
            messages.error(request, 'Ha ocurrido un error.')
    else:
            form = PasswordChangeForm(request.user)
    context = {
    'form': form
    }
    return render(request, 'profileedit.html', context)
    

    模板:

    {{ profile_edit.as_ul }} 
    {{ form.as_ul }} 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-05
      • 1970-01-01
      • 1970-01-01
      • 2011-09-04
      • 2017-12-15
      • 2021-04-01
      • 2018-10-11
      • 2018-03-21
      相关资源
      最近更新 更多