我在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有效,但是图像无效。
答案 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_URL
与user.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}