如何将ImageField中的图像放在Django中的html电子邮件模板上

时间:2019-10-01 19:25:48

标签: django django-models

我在views.py中有

   def buy(request):
       if request.method=='POST':
           form=forms.Purchase(request.POST)
           if form.is_valid():
               form.save()
               user = Person.objects.filter(first_name=form.cleaned_data.get('first_name')).filter(last_name=form.cleaned_data.get('last_name')).first()
               name=form.cleaned_data.get('first_name') + form.cleaned_data.get('last_name')
               subject, from_email, to = 'Subject test1234', 'address@gmail.com', form.cleaned_data.get('email')
               html_content = render_to_string('tickets/mail_template.html', {'first_name':user.first_name, 'imagelink':user.qr_image})
               text_content = strip_tags(html_content)
               msg = EmailMultiAlternatives(subject, text_content, from_email, [to])
               msg.attach_alternative(html_content, "text/html")
               msg.send()
               return redirect('thankyou')
        else:
           form=forms.Purchase()

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

ImagField的内部包含jpg图像文件,我希望它显示在正在发送的html电子邮件中。

mail_template.html:

{% extends "event/base.html" %}
    {% block content %}
        <p>{{ first_name }}</p>
        <img src= {{ imagelink }}>
    {% endblock content%}

first_name有效,但是图像无效。

1 个答案:

答案 0 :(得分:0)

因为django会将网址以相对格式存储。您必须将image src设置为相对网址,以便您的邮件阅读器能够读取image src。

因此,您可以使用HttpRequest.build_absolute_uri创建绝对网址:

您的views.py

def view(request):

    imagelink = request.build_absolute_uri(user.qr_image.url)
    # ...{'first_name':user.first_name, 'imagelink': imagelink}

保持其余部分不变。


在某些情况下,您没有请求对象,则可以使用设置来存储SERVER_URL,并且可以将SERVER_URLuser.qr_image结合使用以获得绝对网址。

settings.py

SERVER_URL="https://your-domain.com" # You could use django-environ to load this from environment variables also to be flexible when switching between environments

views.py

from django.conf import settings

def view(request):

    imagelink = settings.SERVER_URL + user.qr_image.url
    # ...{'first_name':user.first_name, 'imagelink': imagelink}