【问题标题】:open html file and add data into it with iteration打开html文件并通过迭代将数据添加到其中
【发布时间】:2021-09-04 01:43:00
【问题描述】:

我有一个发票的 html 文件。我想显示我的数据库中的一些数据,这些数据可以在表格的多行中。

如何使用迭代来显示发票中的数据。

例如:在一个组织中,有 3 个人使用优惠券进行付款。以及何时发票会生成所有三个人的姓名以及我要显示的日期和金额。

          <thead>
            <tr>
              <th class="col-4 border-0"><strong>Sites</strong></th>
              <th class="col-4 border-0"><span><strong>Mode</strong></span></th>
              <th class="col-4 border-0"><span><strong>Amount</strong></span></th>
            </tr>
          </thead>
          <tbody>
          <tbody>
          ---for loop here---
            <tr>
              <td class="col-4 text-1 border-0"> {var 1} </td>
              <td class="col-4 border-0"><span> {var 2} </span></td>
              <td class="col-4 border-0"><span> {var 3} </span></td>
            </tr>

          </tbody>
        </table>

我从视图传递数据的方式是:

    my_dict=[{'var1':'my site', 'var2': 'DIY', 'var3':'111'},
             {'var1':'my site2', 'var2': 'DIY', 'var3':'222'}]
    with open(BACKEND_TEMPLATE + 'Invoice_base.html') as inf:
        txt = inf.read()
        val = txt.format(date=today, invoice_id=str(identity), domain=FRONTEND_DOMAIN,
                         customer_name=(obj.customer.first_name + " " + obj.customer.last_name),
                         company=obj.customer.company_name, contact=obj.customer.phone_number, my_dict=my_dict)

我怎样才能做到这一点。

html 文件不支持模板标签,或者可能是我没有正确使用它。 如果有简单的解决方案,请帮助我!

【问题讨论】:

标签: python django html-table django-templates


【解决方案1】:

我认为你在 html 中拼写错误 {var 1} 应该没有空格 {var1} 然后它应该可以工作。


虽然使用 django 我推荐以下内容:

django Template对象中有一个名为Template.render()的方法

  1. 因此将html文件中的所有{var1}更改为{{var1}}
  2. 在你看来my_dict"data": [list of var dicts]
  3. 使用template = django.template.loader.gettemplate('path/to/template) 获取您的模板
  4. 使用template.render(context=my_dict)从html中获取文本字符串

您可能需要根据需要修改一些 for 循环。

【讨论】:

  • 实际上我想在将 Myvalues 粘贴到模板中后用新名称保存模板。我不在管理站点上呈现。基本上它用于发票生成。这就是为什么我将它作为文件打开并在更改值后我将使用新文件名保存并下载。
  • Template.render 方法非常适合这个。你只会得到一个 html 作为字符串。然后,您可以将字符串保存到一个新文件中,并根据需要重命名。
【解决方案2】:

我要感谢@CyDevos,我能够使用 BeautifulSoup 实现我想要的。 以下是我的做法。

  1. 将 BeautifulSoup 包作为汤导入。
  2. 使用 html 数据打开 TemplateCreated 的一个 Soup 实例,在我的例子中它是 -val
    with open(BACKEND_TEMPLATE + 'Invoice_base.html') as inf:
        val = inf.read()

    html_data = Soup(val, features="html5")
  1. 找到我们要更改的标签或类。
    table_tbody = html_data.find('tbody')

  1. 添加您的新标签、文本、类或您想要的任何内容。
    for ele in invoice_ele_list:
        amount = str(ele['amount'])
        # print(amount, type(amount))
        new_row = html_data.new_tag('tr')
        td_site = html_data.new_tag('td')
        td_site.string = ele['site__slug']
        td_mode = html_data.new_tag('td')
        td_amount = html_data.new_tag('td')
        td_site['class'] = "col-4 text-1 border-0"
        td_mode['class'] = td_amount['class'] = "col-4 border-0"
        span_mode = html_data.new_tag('span')
        span_mode.string = ele['payment_for_permit_mode']
        span_amount = html_data.new_tag('span')
        span_amount.string = amount
        td_mode.insert(1, span_mode)
        td_amount.insert(1, span_amount)
        new_row.insert(1, td_site)
        new_row.insert(2, td_mode)
        new_row.insert(3, td_amount)
        table_tbody.insert(3, new_row)

更多细节我会参考BeautifulSoup的文档。

【讨论】:

    猜你喜欢
    • 2012-06-19
    • 2012-10-28
    • 2012-08-11
    • 2020-03-27
    • 2020-02-19
    • 1970-01-01
    • 1970-01-01
    • 2016-05-27
    • 1970-01-01
    相关资源
    最近更新 更多