首页 > 解决方案 > 如何在另一个模板中打开上传的文件 - Django?

问题描述

我的 django 应用程序充当电子邮件服务,发送的电子邮件是可见的,并且可以发送 html 电子邮件。如何在查看邮件页面上显示 html 电子邮件,而不仅仅是显示文件名?(以下是 html 电子邮件的邮件视图):在此处输入图像描述

我将如何在此页面的正文中显示实际的 html?

这是我的views.py:

def outbox(request):
#Mail_Item.objects.all().delete()

if request.method == "POST" and request.POST.get('Username', False)!=False:
    username = request.POST.get('Username')
    password = request.POST.get('Password')
    user = authenticate(request, username=username, password=password)
    if user is not None:
        login(request, user, backend='django.contrib.auth.backends.ModelBackend')
        print(username + " has logged in")

        messages = Mail_Item.objects.filter(user=request.user.username)
        args = {'messages':messages}

        return render(request, 'outbox.html', args)
    else: 
        return render(request, '404.html')

elif request.POST.get('Username', False) == False and request.POST.get('mail_body_field', False) == False:
    pass

elif request.method == "POST" and request.POST.get('mail_subject_field')!=False:
    subject = request.POST.get('mail_subject_field')
    body = request.POST['mail_body_field']
    file = ""
    try:
        file = request.FILES['filename']

    except:
        pass

    print("sending mail:")

    for i in range(1, len(Res)+1):
        y = Res['ID' + str(i)].email
        print("sent to " + y )
        msg = EmailMessage(subject, body, 'email@example.com', [y])
        msg.content_subtype = "html"
        if (str(file)) != "" and (str(file))[-4:] != 'html':

            msg.attach_file(str(file))
            obj = Mail_Item(subject=subject, body=body, user=request.user.username, file_name=(str(file)))
            obj.save()
            print("email stored in database")

        elif (str(file)) != "" and (str(file))[-4:] == 'html' :

            uploaded_file = file
            fs = FileSystemStorage()
            fs.save((str(file)), uploaded_file)

            html_message = render_to_string((str(file)), {'context': 'values'})
            plain_message = strip_tags(html_message)
            from_email = 'From <email2@example.com>'
            mail.send_mail(subject, plain_message, from_email, [y], html_message=html_message)
            obj = Mail_Item(subject=subject, body=body, user=request.user.username, file_name=(str(file)))
            obj.save()

        else:

            obj = Mail_Item(subject=subject, body=body, user=request.user.username, file_name='None')
            obj.save()
            print("email stored in database")
        #msg.send()
        i += 1

    messages = Mail_Item.objects.filter(user=request.user.username)
    args = {'messages':messages}

    return HttpResponseRedirect('../templates/outbox.html', args, request)
else:
    print("pleeeeeaassee")
    return render(request, '404.html')

messages = Mail_Item.objects.filter(user=request.user.username)
args = {'messages':messages}  


return render(request, 'outbox.html', args)

def login_page(request):

if request.method == "POST":
    username = request.POST['sign-up-name']
    email = request.POST['sign-up-email']
    password = request.POST['sign-up-password']
    user = User.objects.create_user(username, email, password)
    user.save()
    print(username + " has been added to the user database.")
else:
    pass
return render(request, 'login.html')

def signup_page(request):
    return render(request, 'signup.html')

def mail_view(request, id=None):
    if id:
        email = Mail_Item.objects.get(id=id)
        args = {'email':email}
    else:
        pass
    return render(request, 'mail-view.html', args)

def log_out(request):
    logout(request)
    return render(request, 'log-out.html')

def delete(request):
    Mail_Item.objects.filter(id=id).delete()
    messages = Mail_Item.objects.filter(user=request.user.username)
    args = {'messages':messages}  

    return render(request, 'outbox.html', args)

这是我的邮件视图模板的代码,我想在其中放置正在发送的 html:

<div class="mail-view">
                    <h4 class="m-0">{{ email.subject }}</h4>

                    <div class="divid"></div>
                    <div class="media">
                        <div class="media-left">
                            <div class="avatar avatar-lg avatar-circle">
                                <img class="img-responsive" src="{% static '../static/assets/images/221.jpg' %}" alt="avatar"/>
                            </div><!-- .avatar -->
                        </div>

                        <div class="media-body">
                            <div class="m-b-sm">
                                <h4 class="m-0 inline-block m-r-lg">
                                    <a href="#" class="title-color">Access Bank</a>
                                </h4>
                            </div>
                            <p><b>Attachment: </b>{{ email.file_name }}</p>
                        </div>
                    </div>
                    <div class="divid"></div>

                    <div class="row">
                        <div class="col-md-12">
                            <div class="m-h-lg lh-xl">
                                <p>{{ email.body }}</p>
                            </div>
                        </div>
                    </div>
                </div>

模型.py:

 from django.db import models


class Details(models.Model):
    email = models.CharField(max_length=200)
    def __str__(self):
        return self.email

class Mail_Item(models.Model):
    subject = models.CharField(max_length=200)
    body = models.CharField(max_length=300)
    time = models.DateTimeField(auto_now=True)
    user = models.CharField(max_length=15)
    file_name = models.CharField(max_length=100, null=True, default=None)


    def __str__(self):
        template = '{0.subject} {0.body} {0.time} {0.user} {0.file_name}'
        return template.format(self)

标签: djangodjango-templates

解决方案


推荐阅读