0

我正在尝试以表格格式发送获取的数据。我在邮箱中收到的输出是:

{% for row in {results} %}  {{row[0]}}  {{row[1]}}  {{row[2]}}  {{row[3]}}  {{row[4]}}  {% endfor %}

这是代码:

from email.message import EmailMessage
import smtplib
import psycopg2
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from flask import Flask, render_template, request

msg = MIMEMultipart('alternative')
msg['Subject'] = 'Table'
msg['From'] = "pathakgandharv@gmail.com"
msg['To'] = "pathakgandharv@gmail.com"
text = "Hi!\nHow are you?\nHere is the data you wanted :"
# DatabaseConncetion
user = "------"
password = "-----"
host = "@some host"
port = 8081
database = " "
insert_time="some value"
entity_name="some value"
db_conn = psycopg2.connect(
    host=host, user=user, password=password, database=database)
cursor = db_conn.cursor()
sql_query = "SELECT * FROM operational_metadata WHERE bor_name = %s and insert_time  = %s;"
cursor.execute(sql_query, (entity_name, insert_time,))
results = cursor.fetchall()
for row in results:
    a0=row[0]
    a1=row[1]
    a2=row[2]
    a3=row[3]
    a4=row[4]

html = """\
<html>
  <head></head>
  <body>
   <table border="1">

     <tr>
     {% for row in {results} %}
        <td>{{row[0]}}</td>
        <td>{{row[1]}}</td>
        <td>{{row[2]}}</td>
        <td>{{row[3]}}</td>
        <td>{{row[4]}}</td>
     {% endfor %}

     </tr>

   </table>
  </body>
</html>
"""
part1 = MIMEText(text, 'plain')
part2 = MIMEText(html, 'html')
msg.attach(part1)
msg.attach(part2)
mail = smtplib.SMTP('smtp.gmail.com', 587)
mail.ehlo()
mail.starttls()
mail.login("pathakgandharv@gmail.com","----------")
mail.sendmail("pathakgandharv@gmail.com","pathakgandharv@gmail.com", msg.as_string())
mail.quit()

如何以表格格式发送数据?我能够从数据库中获取所有值。还有其他更好的方法吗?我尝试使用 PrettyTable 但它不起作用

4

1 回答 1

0

你的代码有很多问题。

  • 您只使用了 Django 模板语法,但没有将它(连同上下文)呈现为正确的 HTML。
  • Python 用于访问列表元素的方括号语法不适用于 Django 的模板。在模板代码内部,而不是row[0]使用row.0.

执行以下更改以为邮件正文生成正确的 HTML

from django.template import Template, Context

...
...

html = """\
<html>
  <head></head>
  <body>
   <table border="1">
     {% for row in results %}  <!-- braces are not required since `results` is a context variable -->
     <tr>
        {% for item in row %}
        <td>{{ item }}</td>
        {% endfor %}
     </tr>
     {% endfor %}

   </table>
  </body>
</html>
"""

template = Template(html)
html = template.render(Context({'results': results})

...
...

检查https://docs.djangoproject.com/en/dev/ref/templates/language/#template-variables以了解点运算符在 Django 模板中是如何工作的。

于 2020-04-29T11:54:48.993 回答