我想将一个列表中的值与第二个列表中的值进行比较,并返回第一个列表中但不在第二个列表中的所有值.
list1 = ['one','two','three','four','five']
list2 = ['one','two','four']
Run Code Online (Sandbox Code Playgroud)
将返回'三'和'五'.
我对python只有一点经验,所以这可能会成为一种荒谬而愚蠢的尝试解决方法,但这就是我迄今所做的:
def unusedCategories(self):
unused = []
for category in self.catList:
if category != used in self.usedList:
unused.append(category)
return unused
Run Code Online (Sandbox Code Playgroud)
然而,这会引发错误'迭代超过非序列',我认为这意味着一个或两个'列表'实际上不是列表(两者的原始输出与我的第一个示例的格式相同)
我已命名实用程序,并希望为以后的i18n用法标记名称.这是正确的方法吗?
<utility
name="Home"
i18n:attributes="name"
provides=".interfaces..."
factory=".shortcut...." />
Run Code Online (Sandbox Code Playgroud) 我想通过在Plone站点中使用Python脚本来设置许多文件夹的共享权限.
假设我的configure.zcml文件中有以下代码.我希望我的课程也可以用于另一个界面,让我们说吧Interface2
<browser:page
for="Interface1"
class="plone.app.content.browser.reviewlist.FullReviewListView"
name="full_review_list"
template="document_full_review_list.pt"
permission="cmf.ReviewPortalContent" />
Run Code Online (Sandbox Code Playgroud)
如何在我的zcml文件中声明这个?
这么久我尝试了下面的内容:
<browser:page
for="Interface1 Interface2"
class="plone.app.content.browser.reviewlist.FullReviewListView"
name="full_review_list"
template="document_full_review_list.pt"
permission="cmf.ReviewPortalContent" />
Run Code Online (Sandbox Code Playgroud)
和
<browser:page
for="Interface1"
allowed_interface="Interface2"
class="plone.app.content.browser.reviewlist.FullReviewListView"
name="full_review_list"
template="document_full_review_list.pt"
permission="cmf.ReviewPortalContent" />
Run Code Online (Sandbox Code Playgroud) 我正在做一些PloneFormGen的工作.目前,PloneFormGen在内部输入表单条目作为元组,没有关联的列信息.如果添加了新列(表单字段),则现有数据将变为无效.
这可以很容易地避免将数据存储在有序字典中,这些字典保留了输入的列顺序和列ID.
ZODB是否具有与有序字典等效的数据类型?如果可能,即使使用匹配的API(Python dict-like项操作和访问)?
是否可以使用五个.grok 注册命名适配器。
ZCML 等价物将是:
<adapter name="description" factory=".indexers.mytype_description" />
Run Code Online (Sandbox Code Playgroud) 我目前正在开发一个包含多种自定义内容类型的Plone项目.这些内容类型有几个字段,这些字段又从词汇表中获取它们的值.目前,我只是在vocabularies.py文件中硬编码我的值:
from Products.Archetypes import atapi
CITIES_LIST = atapi.DisplayList((
('nairobi', 'Nairobi'),
('kisumu', 'Kisumu'),
('mombasa', 'Mombasa'),
('eldoret', 'Eldoret'),
('nakuru', 'Nakuru'),
))
Run Code Online (Sandbox Code Playgroud)
这很好用,没有问题.
唯一的缺点是词汇表在代码中被蚀刻,并且需要程序员/开发人员来修改现有的词汇表.
我需要的是一种方式,网站管理员和不一定是程序员的用户将来可以通过网络界面修改词汇表,即来自其他国家/地区的客户能够更改可用城市列表.
我看过Products.ATVocabularyManager,但我觉得它不符合要求.也许如果有一个网格界面来管理词汇表.我想我必须通过将它们存储为ArcheTypes来管理它们.
有没有办法处理Plone 4中的这种情况?怎么会这样呢?
我需要在不同的服务器/机器上实现对多个plone站点的集中搜索.如果有一种方法可以选择要搜索的站点是一个加号而不是主要问题.我想到的方法很少:
- 将ZCatalog索引导出到XML文件,并定期使用爬虫来获取所有XML文件,以便可以对它们进行搜索,但这种方式不允许实时搜索.
- 有一种方法可以使用通用目录,但它不是最优的,并且由于某些要求而无法在我正在处理的站点上实现.
- 我读到他们使用solr但我需要帮助才能使用它的地方.
但我需要一种方法来使用现有的ZCatalog和索引,而不是创建另一个索引,因为我认为使用solr的情况是由于额外的开销和需要维护的额外索引.但如果没有其他解决方案可能会使用它.我是搜索的初学者,所以请尽可能详细说明.
如果重复循环为空,我需要显示友好消息.示例代码:
<ul tal:repeat="data context/qr-list">
<li><a tal:attributes="href string:det-rec?id=${data/id}" tal:content="data/vaga">description</a></li>
</ul>
Run Code Online (Sandbox Code Playgroud)
当循环为空时,我将显示一条消息:抱歉,没有结果.
我一直在使用模式行为没有问题,但我想要一个提供一些逻辑的方法.现在我有
class IMyFoo(form.Schema):
requester = schema.TextLine(title=_(u"Requestor"),
required=False,
)
def foo(self):
""" foo """
alsoProvides(IMyFoo, IFormFieldProvider)
Run Code Online (Sandbox Code Playgroud)
并在zcml中
<plone:behavior
title="My behavior"
description="Some desc"
provides=".behaviors.IMyFoo"
for=".interfaces.ISomeInterface"
/>
Run Code Online (Sandbox Code Playgroud)
我在portal_types中的内容类型的行为部分中包含了IMyFoo.这给了我架构但不是foo()方法.所以我尝试使用以下代码阅读http://plone-training.readthedocs.org/en/latest/behaviors2.html来为它添加工厂
class MyFoo(object):
def foo(self):
return 'bar'
Run Code Online (Sandbox Code Playgroud)
并在zcml中
<plone:behavior
title="My behavior"
description="Some desc"
provides=".behaviors.IMyFoo"
factory=".behaviors.MyFoo"
for=".interfaces.ISomeInterface"
/>
Run Code Online (Sandbox Code Playgroud)
但这似乎没有什么区别,或者至少,我不知道如何访问该方法.我能够得到的最接近的是:
class IMyFoo(Interface):
""" Marker """
class MyFoo(object):
def __init__(self, context):
self.context = context
def foo(self):
return 'bar'
<adapter for=".interfaces.ISomeInterface"
factory=".behaviors.MyFoo"
provides=".behaviors.IMyFoo" />
Run Code Online (Sandbox Code Playgroud)
我将IMyFoo放在fti中的behavior属性中,然后通过遍历所有行为来调用它
behavior = resolveDottedName(context.portal_types.getTypeInfo(context.portal_type).behaviors[-1]))
behavior(self).myfoo()
Run Code Online (Sandbox Code Playgroud)
当然,通过这样的FTI并不是正确的方法.但是我现在处于亏损状态.在Archetypes中,我只需创建一个mixin类,并使用我想要使用的任何内容类型继承它.我可以在这里做同样的事,但我的理解是行为应该是它们的替代品,所以我想弄清楚如何使用这种首选方法.