- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我已经通过 paster 添加了几个 BrowserViews,现在我正尝试从 plone.app.testing 运行它们,因为我喜欢可重复和一致的测试。从浏览器手动调用 View 没有任何问题。
我尝试过手动导入和初始化 View ,以及从受限遍历调用类。在这两种情况下,对象都得到了很好的初始化,但是当我尝试触发渲染时,无论是将实例作为函数调用还是使用 __call__() 方法,我都会收到以下错误:
*** KeyError: 'global_cache_settings
我在 plone.app.testing 中查看了 README.rst 中的示例,它似乎没有提到问题,快速谷歌搜索也没有产生任何结果。它可能是站点自定义之一,但是在 greping 源代码时,我发现 Products.CMFPlone 中提到了“global_cache_settings”,所以它可能是一个 plone 的东西:
eggs/Products.CMFPlone-4.1.4-py2.6.egg/Products/CMFPlone/skins/plone_templates/main_template.pt
28: <metal:cache use-macro="context/global_cache_settings/macros/cacheheaders">
29: Get the global cache headers located in global_cache_settings.
eggs/plone.app.layout-2.1.13-py2.6.egg/plone/app/layout/presentation/presentation.pt
11: <metal:cache use-macro="here/global_cache_settings/macros/cacheheaders">
12: Get the global cache headers located in global_cache_settings.
eggs/plonetheme.sunburst-1.1.6-py2.6.egg/plonetheme/sunburst/skins/sunburst_templates/main_template.pt
20: <metal:cache use-macro="context/global_cache_settings/macros/cacheheaders">
21: Get the global cache headers located in global_cache_settings.
这里是相关的类声明:
from zope.interface import implements, Interface
from Products.Five import BrowserView
from Products.CMFCore.utils import getToolByName
from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
from Products.MyProduct import MyProductMessageFactory as _
class IPromoBoardHome(Interface):
"""
PromoBoardHome view interface
"""
def __init__(self, context, request):
pass
def __call__(self):
pass
def test():
""" test method"""
class PromoBoardHome(BrowserView):
"""
PromoBoardHome browser view
"""
implements(IPromoBoardHome)
def __init__(self, context, request):
self.context = context
self.request = request
def __call__(self):
return ViewPageTemplateFile('pt/promoboardhome.pt')(self)
@property
def portal_catalog(self):
return getToolByName(self.context, 'portal_catalog')
@property
def portal(self):
return getToolByName(self.context, 'portal_url').getPortalObject()
def test(self):
"""
test method
"""
dummy = _(u'a dummy string')
return {'dummy': dummy}
模板:
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
lang="en"
metal:use-macro="here/main_template/macros/master"
i18n:domain="Products.MyProduct">
<body>
<div metal:fill-slot="main">
<tal:main-macro metal:define-macro="main"
tal:define="testview view/test">
<span tal:content="testview/dummy">test</span>
</tal:main-macro>
</div>
</body>
</html>
configure.zcml 声明:
<browser:page
for="*"
name="promoboardhome"
class=".promoboardhome.PromoBoardHome"
allowed_interface=".promoboardhome.IPromoBoardHome"
permission="zope2.View"
/>
测试文件:
import unittest2 as unittest
from . import PROD_INTEGRATION_TESTING
from plone.app.testing import setRoles, TEST_USER_ID
from Products.CMFCore.utils import getToolByName
from Products.MyProduct.browser.promoboardhome import PromoBoardHome
class TestPromoBoardHome(unittest.TestCase):
layer = PROD_INTEGRATION_TESTING
def setUp(self):
self.portal = self.layer['portal']
def test_call(self):
pbh = self.portal.restrictedTraverse('@@promoboardhome')
try:
pbh()
except KeyError:
print "that didn't work!"
import pdb; pdb.set_trace()
我是不是做错了什么?
最佳答案
浏览器 View 只不过是命名的多适配器;为了测试它们,您已经在正确的上下文中调用它们并手动设置请求以提供为 View 声明的接口(interface);在你的情况下可能是这样的:
from zope.interface import alsoProvides
from Products.MyProduct.browser.promoboardhome import IPromoBoardHome
class TestPromoBoardHome(unittest.TestCase):
layer = PROD_INTEGRATION_TESTING
def setUp(self):
self.portal = self.layer['portal']
self.request = self.layer['request']
alsoProvides(self.request, IPromoBoardHome)
我对像 collective.nitf 这样的包进行了一堆浏览器 View 测试.
测试愉快!
关于python - plone.app.testing 无法调用 BrowserView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13328534/
我有一个基于 Electron 的浏览器,例如需要渲染客户端应用程序的应用程序。我很想使用 Electron 的 webivew 来渲染我的应用程序,但不推荐使用它们,并且默认情况下也禁用它们。此外,
我正在尝试创建自定义菜单/标题栏,但我使用 BrowserView 将其添加到主 BrowserWindow,而不是仅使用 BrowserWindow.loadURL()方法(原因)。 但是,当启用上
我正在将一个 Electron 应用程序从传统的渲染器 + webview 架构移植到使用 BrowserView 的应用程序。对象。该应用程序使用了一些 BrowserWindows显示 webvi
我有这个问题:标签(JLabel)的工具提示被浏览器 View 隐藏。工具提示正确显示在任何其他 java 组件的顶部,但被 BrowserView 隐藏。我想要的是使工具提示在 BrowserVie
我已经通过 Electron Fiddle 尝试了几个版本,但我无法让 electron browserview 使用预加载的 javascript 文件。我关注了Electron BrowserVi
我在 工作 Electron 5.0.3 我想隐藏一个 浏览器 View 这样就不需要重新创建 BrowserView。我对如何实现这一点没有任何偏好。任何解决方案(JS、CSS 等)都足够了。 我已
我试图在同一个窗口中并排放置两个 BrowserView 。此代码运行: const { app, BrowserWindow, BrowserView } = require('electron')
我想使用 BrowserView 在 Electron 中加载外部网页。它具有与 BrowserWindow 几乎相同的 API。 const currentWindow = remote.getCu
我已经通过 paster 添加了几个 BrowserViews,现在我正尝试从 plone.app.testing 运行它们,因为我喜欢可重复和一致的测试。从浏览器手动调用 View 没有任何问题。
我在 BrowserWindow 中有一个 BrowserView(我确实需要两者): const { app, BrowserWindow, BrowserView } = require('ele
正如标题所示,我正在开发一个 ElectronJS 项目,我有多个 BrowserView 对象,并且想为每个窗口使用不同的代理。 我读了here ses.setProxy() 存在,暗示我也许可以使
我想在 Products.Five.browser.BrowserView 中以“编辑”模式呈现 Plone Archetypes 小部件,但似乎皮肤层中的模板有很多设置浏览器 View 。如何在 B
我一直在关注this URL帮助我使用 BrowserView 创建模板 View 。到目前为止,它工作正常,我能够创建一个带有 View 类的模板。 我需要知道的是是否可以将参数传递给 View 类
鉴于 Products.Five是一个集成层,使 Zope 组件架构 (ZCA) 在 Plone 中可用: 是否可以在 Plone 中使用 zope.publisher.browser 或者我是否必须
我将如何放置 electron BrowserView 或 BrowserWindow 内Atom喜欢 in this package ?BrowserView网上有很多例子和 BrowserWind
我正在制作一个允许用户浏览互联网的 BrowserWindow 或 Webview 的应用程序。使用 Youtube 时,如果单击全屏按钮,我的整个 Electron 应用程序都会全屏显示。不是视频,
假设我在同一个 BrowserWindow 中有两个 BrowserView 和一个允许用户在显示 bv1 或 之间切换的 UI 按钮bv2(类似于 Firefox、Chrome 等浏览器中的“选项卡
我是一名优秀的程序员,十分优秀!