8

だから私は私の見解を持っています:

def home_page(request):
    form = UsersForm()
    if request.method == "POST":
        form = UsersForm(request.POST)

        if form.is_valid():
            form.save()
    c = {}
    c.update(csrf(request))
    c.update({'form':form})
    return render_to_response('home_page.html', c)

私のforms.py:

class UsersForm(forms.ModelForm):

    class Meta:
        model = Users
        widgets = {'password':forms.PasswordInput()}

    def __init__(self, *args, **kwargs):
        super( UsersForm, self ).__init__(*args, **kwargs)
        self.fields[ 'first_name' ].widget.attrs[ 'placeholder' ]="First Name"  
        self.fields[ 'last_name' ].widget.attrs[ 'placeholder' ]="Last Name"
        self.fields[ 'password' ].widget.attrs[ 'placeholder' ]="Password"

そして私のテンプレート:

<html>
    <body>

    <form method="post" action="">{% csrf_token %}
        {{ form.first_name }} {{form.last_name }} <br>
        {{ form.password }} <br>
        <input type="submit" value="Submit Form"/>
    </form>

    {% if form.errors %}
        {% for field in form %}
        {% for error in field.errors %}
            <p> {{ errors }} </p>
        {% endfor %}
        {% endfor %}
        {% for error in form.non_field_errors %}
        <p> {{ error }} </p>
        {% endfor %}
    {% endif %}

    </body>
</html>

ここで、フォーム フィールドを分割する前のフォームは次のようになっていることに注意してください。

    <form method="post" action="">{% csrf_token %}
            {{ form }}
        <input type="submit" value="Submit Form"/>
    </form>

フォームに問題がある場合 (フィールドの 1 つが欠落している場合など) は、自動的にエラー メッセージが表示されます。テンプレートのフォーム フィールドを分割した後 ({{ form.first_name }}、{{ form.last_name }}、および {{ form.password }} を独自のセクションにした)、自動的にエラー メッセージが表示されなくなりました。これは正常ですか?

しかし、主な問題は、なぜ私の {{ if form.errors }} ステートメントが機能しないのか、エラー メッセージがある場合にエラー メッセージを表示するのかということです。たとえば、意図的にフォームのフィールドに入力せずに [送信] をクリックすると、データベースは更新されませんが (これは良いことです)、エラー メッセージは表示されません。理由はありますか?

また、 {{ forms.non_field_errors }} を削除しようとし、次のようにフィールド エラーのみを返そうとしました。

    {% if form.errors %}
        {% for field in form %}
        {% for error in field.errors %}
            <p> {{ errors }} </p>
        {% endfor %}
        {% endfor %}
    {% endif %}

しかし、それでも機能しません。

4

4 に答える 4

8

間違い(タイプミス)を見つけました。

スニペットは次のようになります。

{% if form.errors %}
    {% for field in form %}
        {% for error in field.errors %}
            <p> {{ error }} </p>
        {% endfor %}
    {% endfor %}
{% endif %}

errorsの代わりに持っていましたerror

于 2013-09-22T22:56:51.967 に答える