html - Flask 下拉菜单未在发布请求中发送值
问题描述
我有一个带有文本输入和选择下拉列表的表单。下拉列表已填充,但其所选值未在 POST 请求中出现。
edit_user_details.html:
<form class="col-auto" action="{{ url_for('admin_bp.edit_user', user_id=user.id) }}" method="POST">
<div class="form-group">
<label for="user-name">Name</label>
<input type="text" id="user-name" class="custom-form-input form-control" placeholder="John Doe" required name="name" value="{{ user.user_name }}">
</div>
<div class="form-group">
<label for="user-role">Role</label>
<select id="user-role" name="role" class="custom-select custom-dropdown custom-form-input">
{% for role in roles %}
{% if role == user.role %}
<option value="{{ role.id }}" selected>{{ role }}</option>
{% else %}
<option value="{{ role.id }}">{{ role }}</option>
{% endif %}
{% endfor %}
</select>
</div>
<a href="#">
<button type="submit" id="btn-submit-login" class="mr-2 mt-5 z-100 custom-btn custom-btn-primary btn btn-primary">Save changes</button>
</a>
<a href="{{ url_for('admin_bp.users') }}">
<button type="button" class="ml-2 mt-5 z-100 custom-btn custom-btn-secondary btn btn-primary">Discard changes</button>
</a>
</form>
路线.py:
@admin_bp.route('/users/<int:user_id>/edit_details/', methods=['GET', 'POST'])
@login_required
def edit_user(user_id):
user = get_user_by_id(user_id)
if request.method == 'POST':
name = request.form.get('name')
role = request.form.get('role')
name = name if not name == user.user_name else None
role = role if not role == user.role else None
update_user(by_email=user.user_email, name=name, role=role)
flash(f'Changes to {user.user_name} have been saved')
return redirect(url_for('.users'))
roles = get_roles()
role_names = [r.role_name for r in roles]
return render_template('edit_user_details.html', user=user, roles=role_names)
name
输入在提交时通过,但为role
空引号,即使在“网络”选项卡中也是如此。
我看过很多类似的问题,但我仍然不确定我做错了什么。
解决方案
推荐阅读
- php - MySQL 和 MSSQL 中用于 IF INSERT ELSE UPDATE 的通用语法
- node.js - 试图填充父对象的数组,但这样做有困难
- spring-boot - 覆盖 thymeleaf templateEngine 配置在 Spring Boot 2.1.8 中停止工作
- reactjs - 在 Meteor.call 之后在 saga watcher 中调度动作
- reactjs - 在订阅页面和订单页面上使用贝宝智能按钮时,它显示错误“不要同时传递 createSubscription 和 createOrder”
- qt - 覆盆子交叉编译:在 qt5 cmake 项目中执行 moc 或 rcc 时找不到 libz.so.1
- java - 如何在片段更新时更新工具栏标题
- laravel - Laravel 没有数据库连接
- javascript - 在 Angular 中签入组件为空
- html - 可以 HTML