Django, User spezifische Email Template generieren

Django, Flask, Bottle, WSGI, CGI…
Antworten
Rugbein
User
Beiträge: 5
Registriert: Mittwoch 9. Januar 2019, 16:56

Mittwoch 9. Januar 2019, 17:20

Hallo,

ich habe mich in der Denkweise etwas festgefahren, daher mal eine Frage an die Profis wie sich das am besten realisieren lässt.

Vorab ein paar Infos zum Projekt. Wir generieren über Django Kundenspezifische Email Templates mit diversen Werten aus 3 verschiedenen Datenbanken. Dieses Template wird dann Copy&Paste an den Kunden verschickt.Das Template selber wir in einer HTML zusammengebaut.

Soweit so gut.

Jetzt soll dieses Template über den GMAIL Account des einzelnen Mitarbeiters versendet werden und über eine Form verschickt werden. Die Basis Form dazu habe ich bereits erstellt. Nun stellst sich mir allerdings die Frage, wie bekomme ich das generierte Template in das Formfield.

Erst wollte ich das eigentlich weiter über das HTML steuern, aber habe keinen weg gefunden das generierte Template in das Formfield zu bekommen. Dann dachte ich nutze auf simpler weise in der forms einen initial, aber da komme ich nicht auf die Datenbank.

Anbei ein paar Code snippets die ich in Verwendung habe um sich einen Überblick zu verschaffen wie das Muster derzeit aussieht.

##forms

Code: Alles auswählen

from django import forms

CP_email = 'new Email adress'
CP_Topic = 'Topic'
CP_Message = 'Message'
CP_Signature = 'Signature'


class Email_form_Suggestions(forms.Form):

    email = forms.EmailField(max_length=254, initial=CP_email, widget=forms.TextInput(attrs={'style': 'width:400px'}))
    topic = forms.CharField(max_length=254, initial=CP_Topic, widget=forms.TextInput(attrs={'style': 'width:400px'}))
    confirmed = forms.BooleanField(
        required=True,
        initial=False,
        label='CP checked',
        help_text='Please check Email and contact Person from SF before sending Emails!'
    )
    message = forms.CharField(
        max_length=5000,
        initial=CP_Message,
        widget=forms.Textarea(),
        help_text='Write here your message!'
    )
    signature = forms.CharField(
        max_length=500,
        initial=CP_Signature,
        widget=forms.Textarea(),
        help_text='Please add signature when is empty!'
    )


    def clean(self):
        cleaned_data = super(Email_form_Suggestions, self).clean()
        signature = cleaned_data.get('signature')
        email = cleaned_data.get('email')
        topic = cleaned_data.get('topic')
        message = cleaned_data.get('message')
        confirmed = cleaned_data.get('confirmed')

        if not email and not message and not signature and not topic:
            raise forms.ValidationError('You have to write something!')
        if not confirmed:
            raise forms.ValidationError('You have to accept!')

##views

Code: Alles auswählen

from django.shortcuts import render
from .forms_emails import Email_form_Suggestions


def home_email(request):
    if request.method == 'POST':
        form_suggestion = Email_form_Suggestions(request.POST)
        if form_suggestion.is_valid():
            pass  # does nothing, just trigger the validation
    else:
        form_suggestion = Email_form_Suggestions()
    return render(request, 'basic.html', {'form': form_suggestion})

##Basis HTML Template für die Form

Code: Alles auswählen

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">

</head>
<body>
  <form method="post" novalidate>
    {% csrf_token %}

    {% if form_suggestion_email.non_field_errors %}
      <ul>
        {% for error in form_suggestion_email.non_field_errors %}
          <li>{{ error }}</li>
        {% endfor %}
      </ul>
    {% endif %}

    {% for hidden_field in form.hidden_fields %}
      {% if hidden_field.errors %}
        <ul>
          {% for error in hidden_field.errors %}
            <li>(Hidden field {{ hidden_field.name }}) {{ error }}</li>
          {% endfor %}
        </ul>
      {% endif %}
      {{ hidden_field }}
    {% endfor %}

    <table border="1">
      {% for field in form.visible_fields %}

        <tr>
          <th>{{ field.label_tag }}</th>
          <td>
            {% if field.errors %}
              <ul>
                {% for error in field.errors %}
                  <li>{{ error }}</li>
                {% endfor %}
              </ul>
            {% endif %}
            {{ field }}
            {% if field.help_text %}
              <br />{{ field.help_text }}
            {% endif %}
          </td>
        </tr>
      {% endfor %}
    </table>

    <button type="submit">Submit</button>
  </form>

</body>
</html>

##html Template, kleiner Ausschnitt

Code: Alles auswählen

{% if album.account_site == 'DE' %}  <!–  DE template –>

<div class="Email_templates">
   <p>
      Guten Tag {{album_user.sal}} {{album_user.last_name}},
      <br><br>
      anbei erhalten Sie eine kurze Email von mir. .....

Wie würde man das am sinnvollsten so umsetzten, dass beim Öffnen der Form HTML das Template bereits vorgefertigt im Formfield ist und es bei Bedarf dann angepasst werden kann?
Benutzeravatar
sparrow
User
Beiträge: 1023
Registriert: Freitag 17. April 2009, 10:28

Donnerstag 10. Januar 2019, 08:44

übergebe initial vor dem request.
Wenn ich mich richtig erinnere, geht das so:

Code: Alles auswählen

def home_email(request):
    if request.method == 'POST':
        form_suggestion = Email_form_Suggestions(request.POST)
        if form_suggestion.is_valid():
            pass  # does nothing, just trigger the validation
    else:
        form_suggestion = Email_form_Suggestions(initial={'message': 'ham'})  # <---
    return render(request, 'basic.html', {'form': form_suggestion})
Rugbein
User
Beiträge: 5
Registriert: Mittwoch 9. Januar 2019, 16:56

Freitag 11. Januar 2019, 14:42

Ich bin leider jetzt erst dazugekommen mir das genauer anzusehen.

Auf die Idee hätte ich ja eigentlich selber kommen können.

Vielen dank für deine Hilf :wink:
Rugbein
User
Beiträge: 5
Registriert: Mittwoch 9. Januar 2019, 16:56

Sonntag 13. Januar 2019, 15:13

Ich wollte mich nochmal kurz zurückmelden. Ich habe das erste Template komplett eingebaut und es funktioniert super.

Vielen Dank für die Hilfe.
Antworten