Python 2.7 向现有金字塔应用程序添加管理界面

Python 2.7 向现有金字塔应用程序添加管理界面,python-2.7,admin,pyramid,formalchemy,Python 2.7,Admin,Pyramid,Formalchemy,我正在尝试向现有的金字塔项目添加一个好的管理界面。我使用pcreate-s alchemy-s pyramid\u fa\u test创建了一个测试项目,然后将创建的所有额外文件复制到我的项目中,并对它们进行修改以使其适合 在我尝试添加一个正式的策略路线之前,一切看起来都很好: config.formalchemy_model("/foo", package='bar', model='bar.models.specific_models.Thi

我正在尝试向现有的金字塔项目添加一个好的管理界面。我使用
pcreate-s alchemy-s pyramid\u fa\u test
创建了一个测试项目,然后将创建的所有额外文件复制到我的项目中,并对它们进行修改以使其适合

在我尝试添加一个正式的策略路线之前,一切看起来都很好:

config.formalchemy_model("/foo", package='bar',
                         model='bar.models.specific_models.Thingy',
                         **settings)
然后我得到:
ImportError:没有名为forms的模块

我的问题是:如何解决这个问题?或者,添加管理界面的正确方法是什么

我在谷歌上搜索了一大堆都没用

以下是相关代码:

fainit.py:

from bar import models, faforms
import logging

def includeme(config):
    config.include('pyramid_formalchemy')
    config.include('bar.fainit')
    config.include('fa.jquery')
    config.include('pyramid_fanstatic')
    model_view = 'fa.jquery.pyramid.ModelView'
    session_factory = 'bar.models.access.DBSession'
    ## register session and model_view for later use
    settings = {'package': 'bar',
                'view': model_view,
                'session_factory': session_factory,
               }
    config.registry.settings['bar.fa_config'] = settings

    config.formalchemy_admin("/admin", models=models, forms=faforms,
                             **settings)

    # Adding the package specific routes
    config.include('shop.faroutes')
    log.info('formalchemy_admin registered at /admin')
法罗特斯酒店

from bar import models
import logging
log = logging.getLogger(__name__)

def includeme(config):
    settings = config.registry.settings.get('shop.fa_settings}}', {})

    config.formalchemy_model("/alerts", package='shop',
                             model='shop.models.super_models.Alert',
                             **settings)

    log.info('shop.faroutes loaded')
追溯:

Starting subprocess with file monitor
Traceback (most recent call last):
  File "../bin/pserve", line 9, in <module>
    load_entry_point('pyramid==1.5a1', 'console_scripts', 'pserve')()
  File "/home/sheena/WORK/tv_guys_env/local/lib/python2.7/site-packages/pyramid-1.5a1-py2.7.egg/pyramid/scripts/pserve.py", line 51, in main
    return command.run()
  File "/home/sheena/WORK/tv_guys_env/local/lib/python2.7/site-packages/pyramid-1.5a1-py2.7.egg/pyramid/scripts/pserve.py", line 316, in run
    global_conf=vars)
  File "/home/sheena/WORK/tv_guys_env/local/lib/python2.7/site-packages/pyramid-1.5a1-py2.7.egg/pyramid/scripts/pserve.py", line 340, in loadapp
    return loadapp(app_spec, name=name, relative_to=relative_to, **kw)
  File "/home/sheena/WORK/tv_guys_env/local/lib/python2.7/site-packages/PasteDeploy-1.5.0-py2.7.egg/paste/deploy/loadwsgi.py", line 247, in loadapp
    return loadobj(APP, uri, name=name, **kw)
  File "/home/sheena/WORK/tv_guys_env/local/lib/python2.7/site-packages/PasteDeploy-1.5.0-py2.7.egg/paste/deploy/loadwsgi.py", line 272, in loadobj
    return context.create()
  File "/home/sheena/WORK/tv_guys_env/local/lib/python2.7/site-packages/PasteDeploy-1.5.0-py2.7.egg/paste/deploy/loadwsgi.py", line 710, in create
    return self.object_type.invoke(self)
  File "/home/sheena/WORK/tv_guys_env/local/lib/python2.7/site-packages/PasteDeploy-1.5.0-py2.7.egg/paste/deploy/loadwsgi.py", line 146, in invoke
    return fix_call(context.object, context.global_conf, **context.local_conf)
  File "/home/sheena/WORK/tv_guys_env/local/lib/python2.7/site-packages/PasteDeploy-1.5.0-py2.7.egg/paste/deploy/util.py", line 56, in fix_call
    val = callable(*args, **kw)
  File "/home/sheena/WORK/tv_guys_env/shop/shop/__init__.py", line 30, in main
    includeme(config)
  File "/home/sheena/WORK/tv_guys_env/shop/shop/fainit.py", line 8, in includeme
    config.include('shop.fainit')
  File "/home/sheena/WORK/tv_guys_env/local/lib/python2.7/site-packages/pyramid-1.5a1-py2.7.egg/pyramid/config/__init__.py", line 778, in include
    c(configurator)
  File "/home/sheena/WORK/tv_guys_env/shop/shop/fainit.py", line 24, in includeme
    config.include('shop.faroutes')
  File "/home/sheena/WORK/tv_guys_env/local/lib/python2.7/site-packages/pyramid-1.5a1-py2.7.egg/pyramid/config/__init__.py", line 778, in include
    c(configurator)
  File "/home/sheena/WORK/tv_guys_env/shop/shop/faroutes.py", line 12, in includeme
    **settings)
  File "/home/sheena/WORK/tv_guys_env/local/lib/python2.7/site-packages/pyramid-1.5a1-py2.7.egg/pyramid/util.py", line 507, in wrapper
    result = wrapped(self, *arg, **kw)
  File "/home/sheena/WORK/tv_guys_env/local/lib/python2.7/site-packages/pyramid_formalchemy-0.4.4-py2.7.egg/pyramid_formalchemy/__init__.py", line 58, in formalchemy_model
    view=view, models=[model], model=model, **kwargs)
  File "/home/sheena/WORK/tv_guys_env/local/lib/python2.7/site-packages/pyramid_formalchemy-0.4.4-py2.7.egg/pyramid_formalchemy/__init__.py", line 85, in formalchemy_admin
    forms = config.maybe_dotted('%s.forms' % package)
  File "/home/sheena/WORK/tv_guys_env/local/lib/python2.7/site-packages/pyramid-1.5a1-py2.7.egg/pyramid/config/__init__.py", line 848, in maybe_dotted
    return self.name_resolver.maybe_resolve(dotted)
  File "/home/sheena/WORK/tv_guys_env/local/lib/python2.7/site-packages/pyramid-1.5a1-py2.7.egg/pyramid/path.py", line 316, in maybe_resolve
    return self._resolve(dotted, package)
  File "/home/sheena/WORK/tv_guys_env/local/lib/python2.7/site-packages/pyramid-1.5a1-py2.7.egg/pyramid/path.py", line 323, in _resolve
    return self._zope_dottedname_style(dotted, package)
  File "/home/sheena/WORK/tv_guys_env/local/lib/python2.7/site-packages/pyramid-1.5a1-py2.7.egg/pyramid/path.py", line 372, in _zope_dottedname_style
    __import__(used)
ImportError: No module named forms
使用文件监视器启动子流程
回溯(最近一次呼叫最后一次):
文件“./bin/pserve”,第9行,在
加载入口点('pyramid==1.5a1','console\u scripts','pserve')()
文件“/home/sheena/WORK/tv_gues_env/local/lib/python2.7/site packages/pyramid-1.5a1-py2.7.egg/pyramid/scripts/pserve.py”,第51行,主视图
return命令。run()
文件“/home/sheena/WORK/tv_gues_env/local/lib/python2.7/site packages/pyramid-1.5a1-py2.7.egg/pyramid/scripts/pserve.py”,第316行,运行中
全局_conf=vars)
loadapp中的文件“/home/sheena/WORK/tv_gues_env/local/lib/python2.7/site packages/pyramid-1.5a1-py2.7.egg/pyramid/scripts/pserve.py”,第340行
返回loadapp(应用规格,名称=名称,相对到=相对到,**千瓦)
loadapp中的文件“/home/sheena/WORK/tv_guys_env/local/lib/python2.7/site packages/PasteDeploy-1.5.0-py2.7.egg/paste/deploy/loadwsgi.py”,第247行
返回loadobj(应用程序,uri,name=name,**kw)
loadobj中的文件“/home/sheena/WORK/tv_gues_env/local/lib/python2.7/site packages/PasteDeploy-1.5.0-py2.7.egg/paste/deploy/loadwsgi.py”,第272行
返回context.create()
文件“/home/sheena/WORK/tv_gues_env/local/lib/python2.7/site packages/PasteDeploy-1.5.0-py2.7.egg/paste/deploy/loadwsgi.py”,第710行,在create中
返回self.object\u type.invoke(self)
文件“/home/sheena/WORK/tv_gues_env/local/lib/python2.7/site packages/PasteDeploy-1.5.0-py2.7.egg/paste/deploy/loadwsgi.py”,调用中的第146行
返回修复调用(context.object、context.global\u conf、**context.local\u conf)
文件“/home/sheena/WORK/tv_guys_env/local/lib/python2.7/site packages/PasteDeploy-1.5.0-py2.7.egg/paste/deploy/util.py”,第56行,在fix_call中
val=可调用(*参数,**kw)
文件“/home/sheena/WORK/tv_guys_env/shop/shop/_init__.py”,第30行,主文件
includeme(配置)
文件“/home/sheena/WORK/tv\u guys\u env/shop/shop/fainit.py”,第8行,includeme
config.include('shop.fainit')
文件“/home/sheena/WORK/tv_guys_env/local/lib/python2.7/site packages/pyramid-1.5a1-py2.7.egg/pyramid/config/__init_uuuuuuuuu.py”,第778行,包含
c(配置器)
文件“/home/sheena/WORK/tv\u guys\u env/shop/shop/fainit.py”,第24行,includeme
config.include('shop.faroutes')
文件“/home/sheena/WORK/tv_guys_env/local/lib/python2.7/site packages/pyramid-1.5a1-py2.7.egg/pyramid/config/__init_uuuuuuuuu.py”,第778行,包含
c(配置器)
文件“/home/sheena/WORK/tv_gues_env/shop/shop/faroutes.py”,第12行,includeme
**设置)
文件“/home/sheena/WORK/tv_gues_env/local/lib/python2.7/site packages/pyramid-1.5a1-py2.7.egg/pyramid/util.py”,第507行,在包装器中
结果=包裹(自身,*arg,**kw)
文件“/home/sheena/WORK/tv_guys_env/local/lib/python2.7/site packages/pyramid_formalchemy-0.4.4-py2.7.egg/pyramid_formalchemy/_u_init__u.py”,第58行,正式模式
视图=视图,模型=[模型],模型=模型,**kwargs)
文件“/home/sheena/WORK/tv_guys_env/local/lib/python2.7/site packages/pyramid_formalchemy-0.4.4-py2.7.egg/pyramid_formalchemy/_u init_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
forms=config.maybe\u点(“%s.forms”%package)
文件“/home/sheena/WORK/tv_guys_env/local/lib/python2.7/site packages/pyramid-1.5a1-py2.7.egg/pyramid/config/uuuuuuu init_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
返回self.name\u resolver.maybe\u resolve(虚线)
文件“/home/sheena/WORK/tv_guys_env/local/lib/python2.7/site packages/pyramid-1.5a1-py2.7.egg/pyramid/path.py”,第316行
返回自我解决(虚线,包装)
文件“/home/sheena/WORK/tv_guys_env/local/lib/python2.7/site packages/pyramid-1.5a1-py2.7.egg/pyramid/path.py”,第323行,在
返回自我。_zope_dottedname_样式(虚线,包装)
文件“/home/sheena/WORK/tv\u guys\u env/local/lib/python2.7/site packages/pyramid-1.5a1-py2.7.egg/pyramid/path.py”,第372行,采用“zope\u dottedname”样式
__导入(已使用)
ImportError:没有名为forms的模块

听起来像是在找你在
shop.faroutes.forms
创建一个表单模块,脚手架可以工作。。。按照工厂的指示进行操作是很好的。它创造了它创造了如问题中所描述的遥远的路线,也许你已经受够了。