0

フォームの値とそのラベルを取得する関数を作成して、次のようにメール本文に含めることができるようにしようとしています。

<p><strong>Labelvalue</strong>: formvalue</p>

それは可能ですか?

「body = smart_unicode(form.cleaned_data)」を実行すると、口述が得られますが、必要なようにhtmlを取得するために何ができるかわかりません。

フォーム.py

class MyForm(forms.Form):
    TYPE_CHOICES = (
        (ADULT, 'Adult'),
        (CHILD, 'Child'),
    )
    type = forms.ChoiceField(widget=RadioSelect, choices=TYPE_CHOICES, label='Adult or child')
    name = forms.CharField(label='Name')
    birthdate = forms.DateField(widget=SelectDateWidget(years=range(2012,1900,-1)), label='Birthdate')
    address = forms.CharField(label='Address')
    email = forms.EmailField(label='Email')

Views.py

def show_myform(request):
    if request.method == 'POST':

        form = MyForm(request.POST)

        if form.is_valid():
            subject = "Testsubject"

            sender = form.cleaned_data['email']

            recipients = ['post@mydomain.com']

            body = smart_unicode(form.cleaned_data)

            msg = EmailMessage(subject, body, sender, recipients)
            msg.send()            
            return HttpResponseRedirect('/thanks/')


    else:
        form = MyForm()

    return render(request, 'form/myform.html', {
        'form': form,
    })
4

4 に答える 4

1

より良い方法は、テンプレートを作成し、django のrender_to_stringを使用して HTML 文字列を本文として取得することです。

テンプレートに渡しform.cleaned_dataて、テンプレート変数を設定できます。

于 2012-10-04T09:53:34.067 に答える
1

メール本文を別のテンプレートに表示できます。Django 1.3 以降を使用している場合は、次を使用します。

{% for field in form %}
<p><strong>{{ field.label }}</strong>: {{ field.value }}</p>
{% endfor %}

詳細については、Django の BoundForm ドキュメントを参照してください。

于 2012-10-04T10:00:46.493 に答える
0

はい。render_to_string はうまくいきました!

これが私の更新されたソースです:

フォーム.py

class MyForm(forms.Form):
    TYPE_CHOICES = (
        (ADULT, 'Adult'),
        (CHILD, 'Child'),
    )
    type = forms.ChoiceField(widget=RadioSelect, choices=TYPE_CHOICES, label='Adult or child')
    name = forms.CharField(label='Name')
    birthdate = forms.DateField(widget=SelectDateWidget(years=range(2012,1900,-1)), label='Birthdate')
    address = forms.CharField(label='Address')
    email = forms.EmailField(label='Email')

ビュー.py

from __future__ import unicode_literals
from django.shortcuts import render
from django.http import HttpResponseRedirect
from django.core.mail import send_mail, EmailMessage, EmailMultiAlternatives
from norskfamilie.forms import HealthForm
from django.utils.encoding import smart_unicode
from django.template.loader import render_to_string

def show_Myform(request):
    if request.method == 'POST':

        form = MyForm(request.POST)

        if form.is_valid():
            subject = "My subject"

            sender = form.cleaned_data['email']

            recipients = ['post@mydomain.com']

            rendered = render_to_string('email_body.html', {'form':form , 'form_headline':subject})

            msg = EmailMultiAlternatives(subject, rendered, sender, recipients)
            msg.attach_alternative(rendered, "text/html")
            msg.send()            
            return HttpResponseRedirect('/thanks/')


    else:
        form = MyForm()

    return render(request, 'form/myform.html', {
        'form': form,
    })

email_body.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    </head>
    <body>
        <h1>{{ form_headline }}</h1>

        {% for field in form %}
            <p><strong>{{ field.label }}</strong>: {{ field.value }}</p>
        {% endfor %}
    </body>
</html>
于 2012-10-04T10:40:24.843 に答える
0

必要な html を body 変数にレンダリングするためにトレイを使用できます。メール本文用の html テンプレートも必要です。

from django.template.loader import render_to_string
body = render_to_string('yourapp/mail_template.html', {'var1':var1, 'var2':var2})

必要なものは何でもテンプレート コンテキスト ディクショナリに渡すことができます (ここでは、たとえば var1 と var2 を使用しました)。次に、次のようにメールを送信します。

msg = EmailMessage(subject, body, sender, recipients)
msg.send()

これが正しい方向につながることを願っています。

于 2012-10-04T09:58:36.723 に答える