vgo*_*ani 10 python jinja2 flask twitter-bootstrap
我正在构建一个基于Web的仪表板,我想使用Twitter Bootstrap中的单选按钮来帮助创建随后针对MongoDB(通过Flask)运行的查询,然后使用新填充的数据刷新同一页面.我是建立基于网络的仪表板的新手,所以如果有更好的方法,请告诉我.
{% extends "base.html" %}
{% block content %}
<div class="row">
<div class="span4 offset4">
<div class="well">
<legend>Click me!</legend>
<form method="POST" action="" accept-charset="UTF-8">
{% if error %}
<div class="alert alert-error">
<a class="close" data-dismiss="alert" href="#">x</a>{{ error }}
</div>
{% endif %}
<div id="radios1" class="btn-group view-opt-btn-group" data-toggle="buttons-radio">
<button type="button" class="btn active" name="choice1" value="A">A</button>
<button type="button" class="btn" name="choice1" value="B">B</button>
<button type="button" class="btn" name="choice1" value="C">C</button>
<button type="button" class="btn" name="choice1" value="D">D</button>
<button type="button" class="btn" name="choice1" value="E">E</button>
<input type="hidden" name="choice1" value={{request.form['choice1']}} />
</div>
<script type="text/jscript">
$("body").find("#radios1").children().each(function () {
$(this).bind('click', function () {
$("input[name=choice1]").val(this.value);
});
});
</script>
<button class="btn-info btn" input type="submit">Submit</button>
</form>
</div>
</div>
</div>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)
这将生成单选按钮并使用JavaScript代码检测单击了哪个按钮,然后将该数据发送回request.Form对象进行处理.
如何在屏幕更新后在每个按钮栏上设置活动框?我是否必须编写某种{{if request.option1 == ?}}块来定义class="btn active"每个按钮,或者是否有更聪明(或明显)的方法?另外,如何设置默认值/初始化条件?我应该预先填充请求对象中的相应字段吗?
此外,是否可以在不使用上面的JavaScript代码的情况下将选定的框传递给Flask?
cle*_*leg 12
如果你有大量类似的控件 - 最好的方法为它们使用循环.让我们假设我们使用list来存储所有按钮名称,以及其他活动按钮列表.这将给我们一些控制器:
from flask import render_template
@app.route('/form/')
def hello(name=None):
return render_template('hello.html', buttons=['A', 'B', 'C'], active_btns=['A', 'C'])
Run Code Online (Sandbox Code Playgroud)
所以,在模板中我们会有类似的东西:
<div id="radios1" class="btn-group view-opt-btn-group" data-toggle="buttons-radio">
{% for button in buttons %}
{% if button in active_btns %}
<button type="button" class="btn active" name="choice1" value="{{ button }}">{{ button }}</button>
{% else %}
<button type="button" class="btn" name="choice1" value="{{ button }}">{{ button }}</button>
{% endif %}
{% endfor %}
</div>
Run Code Online (Sandbox Code Playgroud)
实际上,使用Jinja的If表达式可以简化for循环中的表达式,并且应该如下所示:
<button type="button" class="btn{{" active" if button in active_btns}}" name="choice1" value="{{ button }}">{{ button }}</button>
Run Code Online (Sandbox Code Playgroud)
但我现在没有Jinja2,语法可能有问题.
如果我没有正确的问题 - 请写一些评论,我会尝试更新我的答案:)
至于设置活动框,我不确定你的意思,但按钮标签属性自动对焦可能会有所帮助.最初将字段留空可能是个好主意.
您可以使用以下Flask代码将选定的框传递给没有JavaScript的Flask(当前HTML设置正确,以便在按下Submit按钮时将请求传递给Flask):
from flask import Flask, render_template, request
@app.route("/", methods = ["GET", "POST"])
def home():
if request.method == "POST":
button = request.form['choice1'] #this retrieves which radio button was pressed
if button == 'A': #if the button with attribute value = "A' is pressed
#what you want to do when button A is pressed
elif button == 'B':
#what you want to do when button B is pressed
elif button == 'C':
#what you want to do when button C is pressed
elif button == 'D':
#what you want to do when button D is pressed
elif button == 'E':
#what you want to do when button E is pressed
return render_template("home.html")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7238 次 |
| 最近记录: |