0

さて、私はこのHTMLフォームを持っています:

<form class="form" action="" method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit" value="register">Login</button>
</form>

そして、この Django ビュー:

from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.http import HttpResponseRedirect
from django.shortcuts import render_to_response
from django.template import RequestContext

    def register(request):
        if request.method == 'POST':
            form = UserCreationForm(request.POST)
            if form.is_valid():
                new_user = form.save()
                return HttpResponseRedirect("/success/")
        else:
            form = UserCreationForm()
        return render_to_response("signup.html", {'form': form,}, RequestContext(request))

これは完全に正常に機能します。ただ、オリジナルのフォルムをもう少しカスタマイズできるようにしたいです。そのため、その方法を理解するために、まず form.as_p 関数のソース コードを調べ、手動で複製してみます。私はこれで終わります:

<form class="form" action="" method="post">
    {% csrf_token %}
    <p>
        <label for="id_username">Username:</label>
        <input id="id_username" type="text" name="username" maxlength="30">
    </p>

    <p>
        <label for="id_password1">Password:</label>
        <input type="password" name="password1" id="id_password">
    </p>

    <p>
        <label for="id_password2">Password confirmation:</label>
        <input type="password" name="password2" id="id_password2">
    </p>

    <button type="submit" value="register">Login</button>
</form>

ただし、これは機能しません。なぜそうしないのか理解できません。form.as_p が出力として上記を持っている場合、理論的にはビューでうまく動作するはずですよね? どんな助けでも大歓迎です。

4

1 に答える 1

3

テンプレートは、フォームまたはフィールドのエラーと、フィールドの事前入力された値の 2 つを見逃しています。明らかに起こっていることは、is_valid が実際には false であるということですが、エラーは表示されていません。

HTML でフィールドをハードコーディングする代わりに、テンプレート変数を使用する必要があります。

{{ form.non_field_errors }}
...
<p>
{{ form.username.label_tag }}
{{ form.username }}
{{ form.username.errors }}
</p>

于 2012-12-04T13:23:32.343 に答える