?如何使用pythondocxpl模板(docxtpl)生成.docx文档?Django Python

2024-10-01 17:28:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图在Django中生成一个.docx文档。为此,我使用docxtpl(pythondocx模板),它通过.docx模板生成文档。我尝试使用以下数据生成文档:

listaFinal = [
   [
      {
         "-":"LIBROS"
      },
      {
         "":"Responsabilidad Social de las Organizaciones (RSO): Avances y propuestas en América Latina",
         "Editorial":"Imprenta Editora Gráfica Real",
         "Año":2015,
         "Páginas":457,
         "Tipo Libro":53
      }
   ],
   [
      {
         "-":"ARTICULOS"
      },
      {
         "":"Gestión universitaria ética y responsable. Indicadores de RSU  ",
         "Link Articulo":"http://www.revistalatinacs.org/13SLCS/2013_actas/170_Valarezo.pdf",
         "issn":"",
         "nombre_conferencia":"V Congreso Internacional Latina de Comunicación  Social – V CILCS – Universidad de La Laguna, diciembre 2013 "
      },
      {
         "":"Universidad Tecnica Particular de Loja. Proceso de internacionalización de la UTPL",
         "Link Articulo":"http://www.iesalc.unesco.org.ve/index.php?option=com_content&view=article&id=1786&Itemid=1147&lang=es",
         "issn":"",
         "nombre_conferencia":""
      }
   ]
]

在我的.views中,我有一个指示我的模板docx_filename.docx的路径,并在context中发送数据:

def generaraDocumento(request):
    response = HttpResponse(content_type='application/msword')
    response['Content-Disposition'] = 'attachment; filename="cv.docx"'

    doc = DocxTemplate(str(settings.BASE_DIR) + '/cv_api/templates/docx_filename.docx')
    context = {'listaFinal': listaFinal}

    doc.render(context)
    doc.save(response)

    return response

我有一个名为docx_filename.docx的模板,我所做的是在这个模板中,我指出我希望结果如何,在我的.docx模板中,我有一个能够显示文件中数据的模板:

{% for lista in listaFinal %}
    {% for i in lista %}
        {% for clave, valor in i.items %}
            {% if forloop.first %}
                {% if clave == '-' %} 
                    {{ clave }} 
                {% endif %}
            {% else %}
                {% if clave %}
                    {{ clave }} 
                {% endif %}  
                    {{ valor }}
            {% endif %}
        {% endfor %}
    {% endfor %}
{% endfor %}

它给我一个类似这样的错误:异常值:“内置函数”或“方法”对象不可iterable。

我知道我试图迭代到listaFinaldocx_filename.docx模板的for有问题。如何正确地进行迭代,以便在.docx文件中绘制数据。我期待任何帮助或建议。提前谢谢


Tags: 数据in文档模板fordocifresponse
1条回答
网友
1楼 · 发布于 2024-10-01 17:28:26

我可以这样解决:

{% for lista in listaFinal %}
    {% for i in lista %}
        {% for clave, valor in i.items() %}
            {% if loop.first  %}
                {% if clave == '-' %} 
                    {{ clave }} 
                {% endif %}
            {% else %}
                {% if clave %}
                    {{ clave }} 
                {% endif %}  
                    {{ valor }}
            {% endif %}
        {% endfor %}
    {% endfor %}
{% endfor %}

更改以下内容: {% for clave, valor in i.items %}对于这个{}和{}对于这个:{% if loop.first %}

相关问题 更多 >

    热门问题