如何在Docassemble的每个问题页面同时显示退出按钮与继续按钮?
在Docassemble每个问题页面同时显示退出与继续按钮的实现技巧
可以实现这个需求,以下是几种实用的方法:
方法一:配置问题的buttons参数(推荐)
Docassemble的问题支持通过buttons参数自定义多个按钮,每个按钮可绑定不同动作,无需修改模板或额外脚本。
示例代码:
question: 请输入你的姓名 fields: - 姓名: user_name buttons: - label: 继续 action: continue # 绑定默认的继续动作 - label: 退出 action: logout # 绑定内置的退出动作,直接跳转到登录页
如果内置的logout动作不符合需求,还可以自定义动作函数:
def custom_logout(): from flask import redirect, url_for # 这里可以添加自定义的退出逻辑,比如清理会话数据 return redirect(url_for('logout'))
然后在问题中引用自定义动作:
question: 请输入你的联系方式 fields: - 手机号: user_phone buttons: - label: 继续 action: continue - label: 退出 action: custom_logout
方法二:自定义页面模板
如果需要全局统一修改所有问题页面的按钮布局,可以覆盖Docassemble的默认问题模板:
- 在项目的
templates目录下创建question.html文件 - 复制默认模板的内容,找到按钮渲染的部分,添加退出按钮的代码:
<!-- 原有继续按钮的代码 --> <button type="submit" class="btn btn-primary">{{ _('Continue') }}</button> <!-- 添加退出按钮 --> <a href="{{ url_for('logout') }}" class="btn btn-danger ml-2">{{ _('退出') }}</a>
这样所有使用该模板的问题页面都会自动显示退出按钮。
方法三:用JavaScript动态添加按钮
如果不想修改模板或问题配置,可通过JavaScript在页面加载时动态插入退出按钮:
在问题的javascript块中添加代码:
$(function() { // 创建退出按钮元素 const exitBtn = $('<button>', { class: 'btn btn-danger ml-2', text: '退出' }).click(function() { // 点击后跳转到退出页面 window.location.href = '/logout'; }); // 将按钮插入到继续按钮的同一容器中 $('.btn-primary').parent().append(exitBtn); });
内容的提问来源于stack exchange,提问作者Fumikage Tokoyami
相关产品推荐
相关产品推荐

