首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >烧瓶-带有动态标签的切换按钮

烧瓶-带有动态标签的切换按钮
EN

Stack Overflow用户
提问于 2018-06-27 16:22:34
回答 2查看 9.2K关注 0票数 8

我是Flask的新手,我想在我的网站上创建一个开关按钮。我想知道这是否可能,以及如何包括动态标签。下图显示了我的想法:

我正在考虑使用wtfforms SubmitField,但我不太知道如何在我的routes.py文件和html模板之间实现这种动态行为。我是这样想的:

forms.py:

代码语言:javascript
复制
from flask_wtf import FlaskForm
from wtforms import SubmitField

class PowerSwitchForm(FlaskForm):
    power_switch = SubmitField("ON")

routes.py:

代码语言:javascript
复制
from flask import render_template, flash, redirect, url_for
from app import app
from app.forms import PowerSwitchForm

@app.route('/power', methods=['GET', 'POST'])
def power():
  power_switch = PowerSwitchForm()
  if power_switch.power_switch.label.text == "ON" and power_switch.validate():
    flash("Power has been turned ON")
    power_switch.power_switch.label.text = "OFF"
    return redirect(url_for('power')
  elif power_switch.power_switch.label.text == "OFF" and power_switch.validate():
    flash("Power has been turned OFF")
    power_switch.power_switch.label.text = "ON"
    return redirect(url_for('power')
  return render_template('power.html', form0=power_switch)

power.html:

代码语言:javascript
复制
<!DOCTYPE html>

{% extends "base.html" %}

{% block content %}
<h2>Power switch</h2>
<form action="" method="post" novalidate>
  {{ form0.hidden_tag() }}
  {{ form0.power_switch() }}
</form>    
{% endblock %}
EN

回答 2

Stack Overflow用户

发布于 2018-06-27 22:43:42

单击切换按钮时,可以使用jquery处理所需的操作。此外,如果在切换按钮时需要执行后端进程,则可以使用ajax。这个答案说明了这两个问题。bootstrap-toggle是一个库,可以实现简单的切换。要使用,请将header标记值复制到下面:

显示"toggled“或”untoggled“的简单切换:

代码语言:javascript
复制
<html>
  <body>
    <head>
      <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/css/bootstrap.min.css">
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
      <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/js/bootstrap.min.js"></script>
      <link href="https://gitcdn.github.io/bootstrap-toggle/2.2.2/css/bootstrap-toggle.min.css" rel="stylesheet">
      <script src="https://gitcdn.github.io/bootstrap-toggle/2.2.2/js/bootstrap-toggle.min.js"></script>
    </head>
    <input type="checkbox" class='toggle' checked data-toggle="toggle">
    <div class='status'>Toggled</div>
  </body>
  <script>
  $(document).ready(function() {
   $('.toggle').click(function() {
      var current_status = $('.status').text();
      if (current_status === 'Untoggled'){
         $('.status').html('Toggled');
      }
      else{
        $('.status').html('Untoggled');
      }

    });
   });
 </script>
</html>

切换触发"toggled“或”untoggled“的后端脚本:

在模板中,稍微更改script

代码语言:javascript
复制
<script>
 $(document).ready(function() {
  $('.toggle').click(function() {
   var current_status = $('.status').text();
   $.ajax({
    url: "/get_toggled_status",
    type: "get",
     data: {status: current_status},
     success: function(response) {
      $(".status").html(response);
     },
     error: function(xhr) {
      //Do Something to handle error
     }
   });
  });
});
</script>

然后,在您的应用程序中创建路径/get_toggled_status

代码语言:javascript
复制
@app.route('/get_toggled_status') 
def toggled_status():
  current_status = flask.request.args.get('status')
  return 'Toggled' if current_status == 'Untoggled' else 'Untoggled'

此示例与纯html/jquery解决方案做相同的事情,但是,它确实演示了在使用切换时如何与后端通信。

票数 8
EN

Stack Overflow用户

发布于 2021-04-20 13:09:02

我也是第一次接触Flask。下面是我尝试过的纯python代码和flask。看起来起作用了。

在templates/demo.html中:

代码语言:javascript
复制
{% extends "bootstrap/base.html" %}
{% import "bootstrap/wtf.html" as wtf %}

{% block content %}
<div class="page-header">
    {{ wtf.quick_form(form) }}
</div>
{% endblock %}

在demo.py中:

代码语言:javascript
复制
from flask              import Flask, render_template, redirect, url_for                          
from flask_bootstrap    import Bootstrap
from flask_wtf          import FlaskForm
from wtforms            import SubmitField

class PowerState(FlaskForm) :
    state = SubmitField('OFF')

app = Flask(__name__)
Bootstrap(app)

app.config['SECRET_KEY'] = 'YOUR SECRET KEY'

@app.route('/', methods=['GET', 'POST'])
def home() :
    form = PowerState()

    if form.validate_on_submit() :
        if form.state.label.text == 'OFF' :
            PowerState.state = SubmitField('ON')
        elif form.state.label.text == 'ON' :
            PowerState.state = SubmitField('OFF')

        return redirect(url_for('home'))
    return render_template('demo.html', form=form)

然后运行: flask run

致敬,Alex.Wu

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51057966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档