【发布时间】:2014-05-01 01:39:47
【问题描述】:
使用我在flask-admin/pymongo/flask 戳的 python shell 并试图弄清楚我是否可以诱使它转储它会为给定页面生成的 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 和pymongo/flask.ext.admin.contrib.pymongo 使这变得相当复杂,但flask-admin rendering/html 是我真正想要理解的。 )
我无法找到有关如何调用/使用烧瓶渲染/html 的直接文档,但是通过向库添加一些调试,我已经能够看到上面的代码导致烧瓶中的蓝图/规则代码在我的app 中运行并填充一个名为view_functions 的列表,其中包含函数回调(有希望的名称,如userpgsview.ajax_loopup、userpgsview.index_view 等)。
index_view,(来自其他调试)似乎绑定到 url admin/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 很高兴。
弗兰克,如果我从完全错误的方法中得出这个结论,我不会感到惊讶,但我没有任何运气找到其他文档,我应该如何手动运行烧瓶,如果我的目标是诱使它生成它将在http://localhost:5000/admin/userpgsview 的html-get 上创建的html。
非常欢迎任何想法。
【问题讨论】:
标签: flask werkzeug flask-admin python