使用python shell,我在flask-admin / pymongo / flask上戳,并试图弄清楚我是否可以诱使它转储它将为给定页面生成的html。
我粘贴到 python shell 的代码如下:
from flask import Flask
from flask.ext.admin import Admin
from flask.ext.admin.contrib.pymongo import ModelView
from wtforms import form, fields
import pymongo
class UserForm(form.Form):
dispname = fields.TextField('Name')
email = fields.TextField('Email')
class UserView(ModelView):
column_list = ('dispname', 'email', 'username', 'userextra')
form = UserForm
client = pymongo.MongoClient()
db = client['cloud']
app = Flask('putting_a_name_here')
admin = Admin(app)
admin.add_view(UserView(db['userpgs']))
#app.run(host='0.0.0.0') # If this is uncommented connecting to
# http://localhost:5000/admin/userpgsview
# properly renders the contents of the mongo
# collection 'userpgs' in db 'cloud'
(我意识到通过在示例中保留flask-admin
and pymongo
/使这变得相当复杂flask.ext.admin.contrib.pymongo
,但flask-admin
呈现/html 是我真正想要理解的。)
我无法找到有关如何调用/使用烧瓶渲染/html 的直接文档,但是通过向库添加一些调试,我已经能够看到上面的代码导致烧瓶中的蓝图/规则代码运行和填充我app
调用view_functions
的带有函数回调的列表(带有有希望的名称,例如userpgsview.ajax_loopup
,userpgsview.index_view
等)。
, index_view
(来自其他调试)似乎绑定到 urladmin/userpgsviw/
是我最想了解的,所以我开始尝试:
>>> app.view_functions.get(u'userpgsview.index_view')()
这导致了异常的回溯RuntimeError: working outside of application context
在使用python shell的烧瓶文档中挖掘我发现了有关设置上下文的信息,所以我做了以下
ctx=app.test_request_context()
ctx.push()
app.preprocess_request()
并再次尝试,结果是:
>>> app.view_functions.get(u'userpgsview.index_view')()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/flask_admin/base.py", line 62, in inner
return f(self, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/flask_admin/base.py", line 62, in inner
return f(self, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/flask_admin/base.py", line 62, in inner
return f(self, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/flask_admin/model/base.py", line 1191, in index_view
filters),
File "/usr/local/lib/python2.7/dist-packages/flask_admin/model/base.py", line 1062, in _get_url
return url_for(view, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/flask/helpers.py", line 312, in url_for
return appctx.app.handle_url_build_error(error, endpoint, values)
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1641, in handle_url_build_error
reraise(exc_type, exc_value, tb)
File "/usr/local/lib/python2.7/dist-packages/flask/helpers.py", line 305, in url_for
force_external=external)
File "/usr/local/lib/python2.7/dist-packages/werkzeug/routing.py", line 1620, in build
raise BuildError(endpoint, values, method)
werkzeug.routing.BuildError: ('index_view', {}, None)
而且我还没有找到任何关于如何初始化事物的线索,所以werkzeug.routing
很高兴。
弗兰克,如果我从完全错误的方法中得出这个结论,我不会感到惊讶,但是我没有任何运气找到其他文档,我应该如何手动运行烧瓶,如果我的目标是哄它进入生成它将在 .html 的 html-get 上创建的 html http://localhost:5000/admin/userpgsview
。
任何想法都会非常受欢迎。