Flask-Admin字段(列)格式化

在某些情况下,我们需要对模型的某个属性进行格式化。比如,默认情况下,日期时间显示出来会比较长,这时可能需要只显示月和日,这时候,列格式化就派上用场了。

比如,如果你要显示双倍的价格,你可以这样做:

pythonclass MyModelView(BaseModelView):
    column_formatters = dict(price=lambda v, c, m, p: m.price*2)

或者在Jinja2模板中使用宏:

htmlfrom flask.ext.admin.model.template import macro

class MyModelView(BaseModelView):
    column_formatters = dict(price=macro('render_price'))

# in template
{% macro render_price(model, column) %}
    {{ model.price * 2 }}
{% endmacro %}

回调函数模型:

pythondef formatter(view, context, model, name):
    # `view` is current administrative view
    # `context` is instance of jinja2.runtime.Context
    # `model` is model instance
    # `name` is property name
    pass

正好和上面的v, c, m, p相对应。


原文:http://flask123.sinaapp.com/article/58/

在Python Web开发中,尤其是使用Flask框架,我们可以按照一定的步骤来构建一个简单的应用,包括使用标准类视图、蓝图、Flask-WTF处理表单等。 1. **标准类视图 (Class-Based Views)** ```python from flask import Flask, render_template, request app = Flask(__name__) @app.route('/') class IndexView(): def dispatch_request(self): return render_template('index.html') if __name__ == '__main__': app.run() ``` 在这个例子中,`IndexView`是一个类视图,`dispatch_request`方法会被自动映射到`/`路由。 2. **蓝图(Blueprints)创建和注册** ```python from flask import Blueprint bp = Blueprint('myblueprint', __name__, url_prefix='/admin') app.register_blueprint(bp) ``` 上面的代码创建了一个名为`myblueprint`的蓝图,并设置了前缀`/admin`。 3. **Flask-WTF处理表单(Form)** ```python from flask_wtf import FlaskForm from wtforms import StringField, PasswordField from wtforms.validators import DataRequired, Length class LoginForm(FlaskForm): username = StringField('Username', validators=[DataRequired(), Length(min=4, max=20)]) password = PasswordField('Password', validators=[DataRequired()]) ``` 这是一个登录表单类,包含用户名和密码字段。 4. **表单渲染** ```python @app.route('/login', methods=['GET', 'POST']) def login(): form = LoginForm() if form.validate_on_submit(): # 表单验证成功后的逻辑... return render_template('login.html', form=form) ``` 用户访问`/login`时会显示表单,提交后检查并处理数据。 5. **表单验证注册表单** ```python class RegisterForm(FlaskForm): email = StringField('Email', validators=[DataRequired(), Email()]) confirm_password = PasswordField('Confirm Password', validators=[DataRequired(), EqualTo('password')]) @app.route('/register', methods=['GET', 'POST']) def register(): form = RegisterForm() if form.validate_on_submit(): # 注册逻辑... flash('Registration successful!') return render_template('register.html', form=form) ``` 这里有一个注册表单,验证邮箱格式和两次密码是否一致。 **相关问题--:** 1. Flask中如何使用Blueprint实现模块化的URL管理? 2. Flask-WTF的表单验证规则是如何定制的? 3. 在Flask中,如何处理用户输入错误的情况?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值