PasswordChangeForm из Django не отображается в шаблоне с 2 формами - PullRequest
0 голосов
/ 30 марта 2020

So this is how it looks but it should show the form Я пытаюсь создать ChangePasswordForm, но он не отображается в шаблоне. Раздел печатает только описание, но не показывает форму. Кстати, я читал об этой конкретной форме c, и большинство веб-сайтов утверждают, что она была реализована с помощью Django, поэтому я не поместил ее в формы. Я думаю, что это может быть ошибкой. Обновление: я добавил первую форму, в этом шаблоне я работаю с двумя формами, но первая работает нормально, проблема только во второй.

views.py

def  profileedit_view(request):
form= PerfilEditadoForm(request.POST or None)
if request.method== '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 = {
    'form1': form
}
return render(request, "profileedit.html", context)
def change_password_view(request):
if request.method == '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 = {
    'form2': form
}
return render(request, 'profileedit.html', context)

шаблон (в случае)

      <div class="tab-pane container p-0 active" id="home1">
                                  <form method="POST" action="#"> {% csrf_token %}
                                    <p>Por favor, no dejes ningún campo en blanco.
                                     <center> {{ form1.as_ul }}
                                            <button class="btn btn-primary py-1 px-2" type="submit" > Save </button>
                                    </center> </p>
                                    </form>
                                  </div>
                                  <div class="tab-pane container p-0 fade" id="home2">
                                      <form method="POST" action="#"> {% csrf_token %}
                                          <p>  Por favor, escriba en los siguientes campos.
                                      <center> {{ form2.as_ul }}
                                              <button class="btn btn-primary py-1 px-2" type="submit" > Save </button></center></p></form>>
                                  </div>

urls.py

urlpatterns = [
path ('profileedit', profileedit_view, name='profileedit'),
path('profileedit', change_password_view, name='profileedit')] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

здесь две формы в одном шаблоне, но первая работает нормально

1 Ответ

0 голосов
/ 30 марта 2020

Я думаю, {{ form2.as_ul }} должно быть {{ form.as_ul }} в вашем файле шаблона. Вам нужно отбросить «2», так как это значение, которое вы вводите в контексте dict для ключа «form2».

Вот мой пример, который возвращает 3 формы в один шаблон с использованием представлений на основе функций:

    def home(request):
    """display app home page/landing page"""

    if request.method == 'POST':

        practiscore_url_form = PractiscoreUrlForm(request.POST)
        get_upped_form       = GetUppedForm(request.POST)
        accu_stats_form1     = AccuStatsForm1(request.POST)

        if practiscore_url_form.is_valid() and get_upped_form.is_valid() and accu_stats_form1.is_valid():

            return render(request, 'home.html', {
                'practiscore_url_form': practiscore_url_form,
                'get_upped_form'      : get_upped_form,
                'accu_stats_form1'    : accu_stats_form1,
                }
            )

    else:

        practiscore_url_form = PractiscoreUrlForm()
        get_upped_form       = GetUppedForm()
        accu_stats_form1     = AccuStatsForm1()


    return render(request, 'home.html', {
        'practiscore_url_form': practiscore_url_form,
        'get_upped_form'      : get_upped_form,
        'accu_stats_form1'    : accu_stats_form1,
        }
    )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...