2014-05-01 2 views
0

파이썬 셸을 사용하여 flask-admin/pymongo/flask에서 파싱 할 것이고 html로 덤핑 할 수 있는지 알아보기 위해 노력하고 있습니다. 주어진 페이지에 대해 생성됩니다.Flax/werkzeug가 파이썬 셸에서 (flask-admin) 페이지를 렌더링합니다.

다음과 같이 내가 파이썬 쉘에 붙여 넣기하고있어 코드는 다음과 같습니다

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를 떠나하여이 훨씬 더 복잡한을 만들고있어 실현 렌더링/html은 내가 실제로 이해하려고하는 것입니다.)

플라스크 렌더링/html이 어떻게 호출되는지/사용되었는지에 대한 직접적인 문서를 찾을 수 없었지만, 라이브러리에 디버깅을 추가하여 직접 문서를 찾을 수 없었습니다. 위 코드가 플라스크에서 청사진/규칙 코드를 유발할 수 있음을 알았습니다. 함수를 콜백 (userpgsview.ajax_loopup, userpgsview.index_view 등의 유망한 이름)과 함께 app에있는 목록을 실행하고 채우려면 view_functions이라고 부릅니다.

(다른 디버깅에서) admin/userpgsviw/를 URL에 따를 나타나는 index_view은 이해 할 가장 것입니다, 그래서 시도가 시작한 : 예외 RuntimeError: working outside of application context에 역 추적을 발생

>>> app.view_functions.get(u'userpgsview.index_view')() 

나는 상황 설정에 대한 정보를 볼 수있는 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을 생성하기 위해 그것을 동축으로 만듭니다.

모든 아이디어가 크게 환영받을 것입니다.

답변

0

당신은 요청을 시뮬레이션하기 위해 Flask testing client을 사용할 수 있어야합니다 :

# Instead of test_request_context 
client = app.test_client() 
response = client.get("/admin/userpgsview") 
# work with response here 
관련 문제