1

少し前から Django フォームの作業を開始しました。私は、次のように書くだけで、フォームを自分で生成させてきました。

{{ test_form.as_p  }}

これはうまくいきました。

次に、このテンプレートをカスタマイズするために回避することにしましたが、何らかの理由で次の行:

{{ form.subject }}

フォームを表示しません。ドキュメントを誤解していましたか? 生成された HTML も確認しましたが、単に {{ form.suject }} を飛び越えているだけです。

コードは次のとおりです。

テンプレート:

<form action="/contact/" method="post">
{{ form.non_field_errors }}
<div class="fieldWrapper">
    {{ form.subject.errors }}
    <label for="id_subject">Email subject:</label>
    {{ form.subject }}
</div>
<div class="fieldWrapper">
    {{ form.message.errors }}
    <label for="id_message">Your message:</label>
    {{ form.message }}
</div>
<div class="fieldWrapper">
    {{ form.sender.errors }}
    <label for="id_sender">Your email address:</label>
    {{ form.sender }}
</div>
<p><input type="submit" value="Send message" /></p>

関連付けられたビュー:

def contact(request):

if request.method == 'POST':
    form = contact_form(data=request.POST)
    if form.is_valid():
        subject = form.cleaned_data['subject']
        message = form.cleaned_data['message']
        sender = form.cleaned_data['sender']
        recipents = ['grit.erlum@gmail.com']
        send_mail(subject, message, sender, recipents)
        print 'mail sent'
return render_to_response('contact.html', {'contact_form' : contact_form}, context_instance=RequestContext(request))

そしてもちろん Form Class :

class contact_form(forms.Form):

subject = forms.CharField(max_length=100)
message = forms.CharField(max_length=1000, widget=forms.Textarea)
sender = forms.EmailField()
4

2 に答える 2

1

render_to_response で、次のように変更します。

{'contact_form' : contact_form}

{'フォーム': contact_form}

またはテンプレートで、{{ form.xxx }} を {{ contact_form.xxx }} に変更します。

于 2012-07-18T15:13:08.983 に答える
0

ビューには変数が定義されていませんがcontact_form、それをに渡していますrender_to_response。また、フォームのバインドされていないバージョンを作成し、それをrender_to_responselikeに渡す必要があります。

def contact(request):
    if request.method == 'POST':
        form = contact_form(data=request.POST)
        if form.is_valid():
            ...
    else:
        form = contact_form() # An unbound form
        return render_to_response('contact.html', {'form' : form}, context_instance=RequestContext(request))
于 2012-07-18T16:16:27.297 に答える