小编Tim*_*imo的帖子

记住分页的表单数据

在我的Flask应用程序中,我有一个视图,它使用Flask-SQLAlchemy分页方法呈现项目表.到目前为止很棒的东西 但是我想添加排序和过滤,所以我创建了一个带有选择框的表单,用户可以在其中选择排序和过滤选项.

在页面上提交排序/过滤器时,视图工作正常:第一页已排序.但是在页面上选择另一个页面时,分页将回退到原始查询.在新页面加载期间,我该怎么做才能保存排序/过滤器选项?使用flask.g已经到了我的面前,但这是正确的方法吗?

class ItemTableForm(Form):
    sort_choices = [('id', 'ID'),
                    ('name', 'Name'),
                    ('status', 'Status')]
    filter_choices = [('all', 'All'),
                      ('instock', 'In stock'),
                      ('sold', 'Sold')]
    sort = SelectField(u'Sort by', choices=sort_choices)
    filter = SelectField(u'Filter by', choices=filter_choices)

@app.route('/browse/<int:page>', methods=("GET", "POST"))
def browse(page):
    form = ItemTableForm()
    if form.validate_on_submit():
        query = Item.query.order_by(getattr(Item, form.sort.data))
    else:
        query = Item.query

    pagination = paginate(query, page)
    return render_template('browse.html', pagination=pagination, form=form)

# My template contains this form and a regular HTML table
<form action="{{ url_for('browse') }}" method="POST">
  {{ form.hidden_tag() }}
  {{ …
Run Code Online (Sandbox Code Playgroud)

python pagination template-engine flask flask-sqlalchemy

6
推荐指数
2
解决办法
1879
查看次数

Python类作为数据存储区

我正在尝试编写一个类似于某种数据存储区的Python类.因此,我不想使用字典,而是希望以class.foo的形式访问我的数据,并且仍然可以执行所有很酷的操作,例如迭代它,就像数据类中的x一样.

以下是我提出的:

class MyStore(object):
    def __init__(self, data):
        self._data = {}
        for d in data:
            # Just for the sake of example
            self._data[d] = d.upper()

    def __iter__(self):
        return self._data.values().__iter__()

    def __len__(self):
        return len(self._data)

    def __contains__(self, name):
        return name in self._data

    def __getitem__(self, name):
        return self._data[name]

    def __getattr__(self, name):
        return self._data[name]


store = MyStore(['foo', 'bar', 'spam', 'eggs'])
print "Store items:", [item for item in store]
print "Number of items:", len(store)
print "Get item:", store['foo']
print "Get attribute:", store.foo …
Run Code Online (Sandbox Code Playgroud)

python attributes setattr

0
推荐指数
1
解决办法
3664
查看次数