0

以下のコードの登録ページがあります。

ビューで:

def register_step2(request, value):
context={"type": value}
if request.method == 'POST':
    form = RegisterForm(request.POST)
    if form.is_valid():
        nric = form.cleaned_data['nric']
        name = form.cleaned_data['name']
        password = form.cleaned_data['password']
        email = form.cleaned_data['email']
        phonenumber = form.cleaned_data['phonenumber']
        dob = form.cleaned_data['dob']
        User.objects.create_user(nric, email, password)
        return HttpResponseRedirect('/')
return render_to_response('register.html', context, RequestContext(request))

register.html内:

{% extends "base.html" %}
{% block subheader %}
{% if type == '0' %}
Are you..
{% endif %}
{% if type == '1' %}
Registration - Able Elder
{% endif %}
{% if type == '2' %}
Registration - Public
{% endif %}
{% endblock %}

{% block content %}
{% if type == '0' %}
<a href="/register/1">an elderly looking for something to do?</a>
<a href="/register/2">the public looking for someone to help you?</a>
{% else %}
<form action="/register/{{type}}/" method="post">{% csrf_token %}
<table class="center">
{% for field in able_form %}
<tr>
    <td>
        {{ field.label_tag }}: 
    </td>
    <td>
    {{ field.errors }}
    {{ field }}
    </td>
</tr>
{% endfor %}
<tr>
<td>
{{ able_form.non_field_errors }} 
</td>
</tr>
<tr>
<td colspan="2">
By clicking on "register" I agree with the terms and conditions.
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="register">
</form>
</td>
{% endif %}
{% endblock %}

context_processors.py内(settings.pyで適切に設定されています)

from forms import RegisterForm

def able_form(request):
    return {
            'able_form' : RegisterForm()}

forms.pyで

class RegisterForm(forms.Form):
    nric = forms.CharField(max_length=NAME_MAX)
    name = forms.CharField(max_length=NAME_MAX)
    password = forms.CharField(widget=forms.PasswordInput)
    confirm_password = forms.CharField(widget=forms.PasswordInput)
    email = forms.EmailField()
    postal_code = forms.IntegerField()
    phone_number = forms.IntegerField()
    date_of_birth = forms.DateField(widget=forms.DateInput)

可変フィールドにはフィールドエラーが表示されることは理解できますが、登録ボタンをクリックしても何も表示されません。私はここで何が間違っているのですか?

4

1 に答える 1

2

更新すると、理由は明らかです。

テンプレートに空白のフォームを渡すだけです。

request.POSTデータを含むバインドされたフォームがテンプレートに返される場所はどこだと思いますか? の新しいインスタンスを作成してRegisterForm(request.POST)も、(コンテキスト プロセッサによって返される) テンプレート内のフォーム インスタンスが魔法のように変更されるわけではありません。

あなたのテンプレートはただ見るだけですRegisterForm()- フォームエラーを知るためには、request.POST データにバインドされたフォームが必要です。

    form = RegisterForm(request.POST)
    if form.is_valid():
       ....
    context['able_form'] = form # you must pass back the bound form if you want to see errors.
return render_to_response('register.html', context, RequestContext(request))

それでも、コンテキスト プロセッサがこのable_formキーをオーバーライドする可能性があります。コンテキスト プロセッサを完全に削除します。

それが素晴らしいアイデアだと思う場合は、そこまたはビューでフォームロジックを実行することを忘れないでください。

于 2012-06-11T02:10:15.840 に答える