У меня есть форма, которая будет перенаправлять на другой маршрут для создания отчета из шаблона docx после отправки формы. Однако есть ошибка (которая, как я подозреваю, является моей json проблемой, я подробно рассмотрю ее ниже)
Маршрут для формы возврата
@app.route('/chargeback-form', methods=['GET', 'POST'])
def chargeback_form():
form = ChargebackForm()
if request.method == 'POST': #this block is only entered when the form is submitted
return redirect(url_for('render_cb_form'), code=307)
return render_template('chargeback_form.html', form=form)
Маршрут для render-cb-form после отправки формы
@app.route('/render-cb-form', methods=['POST','GET'])
def render_cb_form():
final_result = json.dumps(request.form)
template = 'chargeback_template.docx'
document = from_template(template, final_result)
document.seek(0)
return send_file(
document, mimetype='application/vnd.openxmlformats-'
'officedocument.wordprocessingml.document', as_attachment=True,
attachment_filename='generated_chargeback_form.docx')
Это моя функция from_template
def from_template(template, json_result):
target_file = StringIO()
template = DocxTemplate(template)
context = json_result # gets the json result used to render the document
target_file = BytesIO()
template.render(context)
template.save(target_file)
return target_file
Ошибки в моем cmd
[2020-03-09 12:31:51,463] ERROR in app: Exception on /render-cb-form [POST]
Traceback (most recent call last):
File "c:\users\ad0334\desktop\boost\debugging_env\debug_env\lib\site-packages\flask\app.py", line 2446, in wsgi_app
response = self.full_dispatch_request()
File "c:\users\ad0334\desktop\boost\debugging_env\debug_env\lib\site-packages\flask\app.py", line 1951, in full_dispatch_request
rv = self.handle_user_exception(e)
File "c:\users\ad0334\desktop\boost\debugging_env\debug_env\lib\site-packages\flask\app.py", line 1820, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "c:\users\ad0334\desktop\boost\debugging_env\debug_env\lib\site-packages\flask\_compat.py", line 39, in reraise
raise value
File "c:\users\ad0334\desktop\boost\debugging_env\debug_env\lib\site-packages\flask\app.py", line 1949, in full_dispatch_request
rv = self.dispatch_request()
File "c:\users\ad0334\desktop\boost\debugging_env\debug_env\lib\site-packages\flask\app.py", line 1935, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "C:\Users\AD0334\Desktop\Boost\debugging_env\app\routes.py", line 69, in render_cb_form
document = from_template(template, final_result)
File "C:\Users\AD0334\Desktop\Boost\debugging_env\app\generate_docx.py", line 21, in from_template
template.render(context)
File "c:\users\ad0334\desktop\boost\debugging_env\debug_env\lib\site-packages\docxtpl\__init__.py", line 266, in render
xml_src = self.build_xml(context, jinja_env)
File "c:\users\ad0334\desktop\boost\debugging_env\debug_env\lib\site-packages\docxtpl\__init__.py", line 229, in build_xml
xml = self.render_xml(xml, context, jinja_env)
File "c:\users\ad0334\desktop\boost\debugging_env\debug_env\lib\site-packages\docxtpl\__init__.py", line 211, in render_xml
dst_xml = template.render(context)
File "c:\users\ad0334\desktop\boost\debugging_env\debug_env\lib\site-packages\jinja2\environment.py", line 1086, in render
vars = dict(*args, **kwargs)
ValueError: dictionary update sequence element #0 has length 1; 2 is required
127.0.0.1 - - [09/Mar/2020 12:31:51] "[35m[1mPOST /render-cb-form HTTP/1.1[0m" 500 -
Когда я пытаюсь выяснить проблему, я попытался напечатать свой "final_result" в "/ render-cb-form":
{"csrf_token": "blablabla.blabbla", "cb_ref_no": "cb01201", "cb_date": "1/1/20", "received_date": "20/4/20", "type_card_no": "ABC XXXX 1234", "reason": "scam", "tranx_date": "17/6/20", "amount": "RM567.89"}
Когда я просто жестко запрограммировал dict в своей функции, генератор docx работает нормально, но когда я пытаюсь передать как json, всплывающая ошибка ValueError. Любая помощь с благодарностью!