collective.searchandreplace's Issues
Removed behavior searchandreplace from type Document
Plone 5.0.5, s&r 7.1(latest)
./bin/plonectl fg
.......
WARNING plone.dexterity.schema No behavior registration found for behavior named: "collective.searchandreplace.interfaces.ISearchReplaceable" - trying fallback lookup..."
.....
Removed behavior collective.searchandreplace.interfaces.ISearchReplaceable from type Document2016-07-21 13:20:42 ERROR Zope.SiteErrorLog 1469089242.640.267444027251
as a result of the removal behavior - I can't save some of the edited pages
Traceback (innermost last):
Module ZPublisher.Publish, line 138, in publish
Module ZPublisher.mapply, line 77, in mapply
Module ZPublisher.Publish, line 48, in call_object
Module plone.z3cform.layout, line 66, in call
Module plone.z3cform.layout, line 50, in update
Module plone.dexterity.browser.edit, line 58, in update
Module plone.z3cform.fieldsets.extensible, line 59, in update
Module plone.z3cform.patch, line 30, in GroupForm_update
Module z3c.form.group, line 145, in update
Module plone.app.z3cform.csrf, line 21, in execute
Module z3c.form.action, line 98, in execute
Module z3c.form.button, line 315, in call
Module z3c.form.button, line 170, in call
Module plone.dexterity.browser.edit, line 30, in handleApply
Module z3c.form.group, line 126, in applyChanges
Module zope.event, line 31, in notify
Module zope.component.event, line 24, in dispatch
Module zope.component._api, line 136, in subscribers
Module zope.component.registry, line 321, in subscribers
Module zope.interface.adapter, line 585, in subscribers
Module zope.component.event, line 32, in objectEventNotify
Module zope.component._api, line 136, in subscribers
Module zope.component.registry, line 321, in subscribers
Module zope.interface.adapter, line 585, in subscribers
Module z3c.relationfield.event, line 76, in updateRelations
Module zc.relation.catalog, line 546, in unindex
Module zc.relation.catalog, line 556, in unindex_doc
Module zc.relation.catalog, line 621, in _remove
KeyError: InterfaceClass Products.CMFDynamicViewFTI.interfaces.ISelectableBrowserDefault
the problem is specific to version 7.x.x
Control panel configlet icon broken in Plone 6
Sup. Just wanted to point out that the icon does not show up in Plone 6. Not sure why that is, might want to consider revising how the configlet is deployed using GenericSetup based on other similar packages that do work.
plone 5.1*
running a plone5.1-latest buildout and everything is fine so far.
adding collective.searchandreplace leads to some version pinning issues and getting trough all dependency-pitfalls (we all love buildout for that) i ended up pinnning:
zope.publisher = 4.3.2
zope.security = 4.1.1
zope.proxy = 4.2.1
zope.contenttype = 4.2.0
zope.configuration = 4.1.0
zope.browser = 2.1.0
zope.formlib = 4.3.0
after that buildout has done its work but now i can't start zope:
ZConfig.SchemaResourceError: could not load package ZServer: No module named _base
Package name: 'ZServer'
File name: 'component.xml'
Package path: None
so as it seems: no collective.searchandreplace in plone5.1?
p.s.:
i am not shure, if the issue is in the right spot.
but as it was the package, that broke my setup ...
Traceback when searching for text with parentheses
For example, with a search term : "(my text)", you get the following traceback :
Traceback (innermost last):
Module ZPublisher.Publish, line 138, in publish
Module ZPublisher.mapply, line 77, in mapply
Module ZPublisher.Publish, line 48, in call_object
Module zope.formlib.form, line 873, in __call__
Module zope.formlib.form, line 994, in render
Module zope.formlib.form, line 863, in render
Module Products.Five.browser.pagetemplatefile, line 125, in __call__
Module Products.Five.browser.pagetemplatefile, line 59, in __call__
Module zope.pagetemplate.pagetemplate, line 132, in pt_render
Module zope.pagetemplate.pagetemplate, line 240, in __call__
Module zope.tal.talinterpreter, line 271, in __call__
Module zope.tal.talinterpreter, line 343, in interpret
Module zope.tal.talinterpreter, line 888, in do_useMacro
Module zope.tal.talinterpreter, line 343, in interpret
Module zope.tal.talinterpreter, line 533, in do_optTag_tal
Module zope.tal.talinterpreter, line 518, in do_optTag
Module zope.tal.talinterpreter, line 513, in no_tag
Module zope.tal.talinterpreter, line 343, in interpret
Module zope.tal.talinterpreter, line 954, in do_defineSlot
Module zope.tal.talinterpreter, line 343, in interpret
Module zope.tal.talinterpreter, line 533, in do_optTag_tal
Module zope.tal.talinterpreter, line 518, in do_optTag
Module zope.tal.talinterpreter, line 513, in no_tag
Module zope.tal.talinterpreter, line 343, in interpret
Module zope.tal.talinterpreter, line 858, in do_defineMacro
Module zope.tal.talinterpreter, line 343, in interpret
Module zope.tal.talinterpreter, line 954, in do_defineSlot
Module zope.tal.talinterpreter, line 343, in interpret
Module zope.tal.talinterpreter, line 533, in do_optTag_tal
Module zope.tal.talinterpreter, line 518, in do_optTag
Module zope.tal.talinterpreter, line 513, in no_tag
Module zope.tal.talinterpreter, line 343, in interpret
Module zope.tal.talinterpreter, line 946, in do_defineSlot
Module zope.tal.talinterpreter, line 343, in interpret
Module zope.tal.talinterpreter, line 533, in do_optTag_tal
Module zope.tal.talinterpreter, line 518, in do_optTag
Module zope.tal.talinterpreter, line 513, in no_tag
Module zope.tal.talinterpreter, line 343, in interpret
Module zope.tal.talinterpreter, line 858, in do_defineMacro
Module zope.tal.talinterpreter, line 343, in interpret
Module zope.tal.talinterpreter, line 533, in do_optTag_tal
Module zope.tal.talinterpreter, line 518, in do_optTag
Module zope.tal.talinterpreter, line 513, in no_tag
Module zope.tal.talinterpreter, line 343, in interpret
Module zope.tal.talinterpreter, line 954, in do_defineSlot
Module zope.tal.talinterpreter, line 343, in interpret
Module zope.tal.talinterpreter, line 533, in do_optTag_tal
Module zope.tal.talinterpreter, line 518, in do_optTag
Module zope.tal.talinterpreter, line 513, in no_tag
Module zope.tal.talinterpreter, line 343, in interpret
Module zope.tal.talinterpreter, line 858, in do_defineMacro
Module zope.tal.talinterpreter, line 343, in interpret
Module zope.tal.talinterpreter, line 531, in do_optTag_tal
Module zope.tal.talinterpreter, line 513, in no_tag
Module zope.tal.talinterpreter, line 343, in interpret
Module zope.tal.talinterpreter, line 531, in do_optTag_tal
Module zope.tal.talinterpreter, line 513, in no_tag
Module zope.tal.talinterpreter, line 343, in interpret
Module zope.tal.talinterpreter, line 742, in do_insertStructure_tal
Module Products.PageTemplates.Expressions, line 218, in evaluateStructure
Module zope.tales.tales, line 696, in evaluate
- URL: /plone/eggs/collective.searchandreplace-8.2.1-py2.7.egg/collective/searchandreplace/browser/pageform.pt
- Line 115, Column 16
- Expression: <PathExpr standard:u'context/@@searchreplacetable'>
- Names:
{'args': (),
'container': <PloneSite at /Plone>,
'context': <PloneSite at /Plone>,
'default': <object object at 0x7febb211a570>,
'here': <PloneSite at /Plone>,
'loop': {},
'nothing': None,
'options': {},
'repeat': <Products.PageTemplates.Expressions.SafeMapping object at 0x7feb99c7f890>,
'request': <HTTPRequest, URL=http://www.cirb.irisnetlab.be/@@searchreplaceform>,
'root': <Application at >,
'template': <Products.Five.browser.pagetemplatefile.ViewPageTemplateFile object at 0x7feb9c1ee5d0>,
'traverse_subpath': [],
'user': <PropertiedUser 'admin'>,
'view': <Products.Five.metaclass.SearchReplaceForm object at 0x7feb9b10f990>,
'views': <Products.Five.browser.pagetemplatefile.ViewMapper object at 0x7feb97e09d90>}
Module zope.tales.expressions, line 217, in __call__
Module Products.PageTemplates.Expressions, line 147, in _eval
Module zope.tales.expressions, line 124, in _eval
Module Products.PageTemplates.Expressions, line 94, in trustedBoboAwareZopeTraverse
Module OFS.Traversable, line 201, in unrestrictedTraverse
- __traceback_info__: ([], '@@searchreplacetable')
Module zope.traversing.namespace, line 112, in namespaceLookup
Module Products.CMFPlone.patches.security, line 12, in traverse
Module zope.traversing.namespace, line 327, in traverse
Module zope.component._api, line 120, in queryMultiAdapter
Module zope.component.registry, line 238, in queryMultiAdapter
Module zope.interface.adapter, line 532, in queryMultiAdapter
Module collective.searchandreplace.browser.searchreplacetable, line 19, in __init__
Module collective.searchandreplace.browser.searchreplacetable, line 49, in findObjects
Module collective.searchandreplace.searchreplaceutility, line 191, in findObjects
Module Products.LinguaPlone.patches, line 34, in searchResults
Module Products.CMFPlone.CatalogTool, line 393, in searchResults
Module Products.ZCatalog.ZCatalog, line 604, in searchResults
Module Products.ZCatalog.Catalog, line 925, in searchResults
Module Products.ZCatalog.Catalog, line 547, in search
Module Products.ZCTextIndex.ZCTextIndex, line 217, in _apply_index
Module Products.ZCTextIndex.QueryParser, line 136, in parseQuery
Module Products.ZCTextIndex.QueryParser, line 156, in _require
ParseError: Token 'EOF' required, u'(' found
Tested on Plone 5 / collective.searchandreplace 8.2.1.
Add static portlets support
We have a customer who wants to search / replace text across its site ... but more than content types, they also have many static portlets.
Would you be interested / would it be an acceptable usecase to handle these portlets with collective.searchandreplace
, or is it too specific ?
It would obviously be in a different form (at least for performance issues).
Thank you very much for your feedbacks (@mauritsvanrees @gotcha maybe ?)
Restrict searching and replacing to portal_type instead of interface
Since version 6, content types need to implement the ISearchReplaceable
marker interface, otherwise we will not search and replace in them. Problem: when this is activated on a new content type (by enabling the dexterity behavior or for Archetypes add some zcml) the existing content is still not searched. You need to reindex the object_provides
index. I don't like that.
Also, I would like to be able to set the enabled types in one control panel, and not have to write zcml.
Proposal:
- Create a control panel where we can set the supported types. An In-Out widget is probably best for this, so you can easily select them. In an upgrade we could try to be smart and try to determine which types to enable by default. Or we enable a few standard ones.
- On that control panel, also have a boolean option 'restrict types'. Default False: the settings in the In-Out widget are ignored and all types are searched. Then we are back to what happened before version 6.
- Save the settings in plone.app.registry.
- Update the searchandreplace utility to no longer restrict the search on the
ISearchReplaceable
interface, but on the given portal_types. - Cleanup the dexterity behavior and other code needed for the way we are doing it now. Make sure that this does not break existing sites: I am not sure if removing the behavior from the code gives errors when there are still types that use this behavior. An upgrade step is probably needed and we may need to keep the interface around for a while.
I can do this.
@Gagaro What do you think of this? You added this in pull request #4. Would the new way fit your use cases?
deprecationwarning: isDefaultPage
when running a Plone 5.2 (python 3.6) setup we get a deprecation warning:
/buildout/eggs/collective.searchandreplace-8.2.1-py3.6-linux-x86_64.egg/collective/searchandreplace/browser/searchreplaceform.py:9: DeprecationWarning: isDefaultPage is deprecated. Import from Products.CMFPlone instead
from plone.app.layout.navigation.defaultpage import isDefaultPage
todo: adjust import for different versions of plone
UnicodeEncodeError
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-4: ordinal not in range(128)
Additional product is only for sites in the English language.
I can't search in Russian, I think in other non-English too.
Search and (Replace + Remove)
Not working replacement if rtext=NONE (empty replacement box)
I can't remove all occurrences of the query, only replace with a non-empty value.
A simple change in the line:100 "if replace and rtext:" to "if replace" causes an error in Unicode.
Unfortunately my experience is not sufficient to solve this problem.
I think this is a useful feature if implemented.
Can the form look a little nicer?
I think the styling of the form does not fit with the rest of the styling of Plone (at least 6).
leaving the "Find What" and "Replace With" field blank results in error
description
- When leaving Find What empty results in an error. Interestingly, the field "Find What" is a required field but the required property doesn't seem to work all the time (the error didn't always happen) . For full traceback, see below.
- When leaving the Replace With empty and pressing replace, also results in an error. For full traceback, see below.
- This seems to happen on all three button pushes (preview, replace and reset when the find what field is empty)
- you can quickly reproduce the error inside the jupyter notebook binder for more traceback and info.
traceback empty replace with:
Traceback (innermost last):
Module ZPublisher.Publish, line 138, in publish
Module ZPublisher.mapply, line 77, in mapply
Module ZPublisher.Publish, line 48, in call_object
Module zope.formlib.form, line 868, in __call__
Module five.formlib.formbase, line 50, in update
Module zope.formlib.form, line 849, in update
Module zope.formlib.form, line 640, in success
Module collective.searchandreplace.browser.searchreplaceform, line 113, in action_replace
Module collective.searchandreplace.browser.searchreplaceform, line 131, in replace_filtered
Module collective.searchandreplace.searchreplaceutility, line 151, in replaceFilteredOccurences
Module collective.searchandreplace.searchreplaceutility, line 246, in replace_occurences_in_object
Module collective.searchandreplace.searchreplaceutility, line 279, in replaceText
TypeError: coercing to Unicode: need string or buffer, NoneType found
traceback empty find what:
Traceback (innermost last):
Module ZPublisher.Publish, line 138, in publish
Module ZPublisher.mapply, line 77, in mapply
Module ZPublisher.Publish, line 48, in call_object
Module zope.formlib.form, line 873, in __call__
Module zope.formlib.form, line 994, in render
Module zope.formlib.form, line 863, in render
Module Products.Five.browser.pagetemplatefile, line 125, in __call__
Module Products.Five.browser.pagetemplatefile, line 59, in __call__
Module zope.pagetemplate.pagetemplate, line 132, in pt_render
Module zope.pagetemplate.pagetemplate, line 240, in __call__
Module zope.tal.talinterpreter, line 271, in __call__
Module zope.tal.talinterpreter, line 343, in interpret
Module zope.tal.talinterpreter, line 888, in do_useMacro
Module zope.tal.talinterpreter, line 343, in interpret
Module zope.tal.talinterpreter, line 533, in do_optTag_tal
Module zope.tal.talinterpreter, line 518, in do_optTag
Module zope.tal.talinterpreter, line 513, in no_tag
Module zope.tal.talinterpreter, line 343, in interpret
Module zope.tal.talinterpreter, line 954, in do_defineSlot
Module zope.tal.talinterpreter, line 343, in interpret
Module zope.tal.talinterpreter, line 533, in do_optTag_tal
Module zope.tal.talinterpreter, line 518, in do_optTag
Module zope.tal.talinterpreter, line 513, in no_tag
Module zope.tal.talinterpreter, line 343, in interpret
Module zope.tal.talinterpreter, line 858, in do_defineMacro
Module zope.tal.talinterpreter, line 343, in interpret
Module zope.tal.talinterpreter, line 954, in do_defineSlot
Module zope.tal.talinterpreter, line 343, in interpret
Module zope.tal.talinterpreter, line 533, in do_optTag_tal
Module zope.tal.talinterpreter, line 518, in do_optTag
Module zope.tal.talinterpreter, line 513, in no_tag
Module zope.tal.talinterpreter, line 343, in interpret
Module zope.tal.talinterpreter, line 946, in do_defineSlot
Module zope.tal.talinterpreter, line 343, in interpret
Module zope.tal.talinterpreter, line 533, in do_optTag_tal
Module zope.tal.talinterpreter, line 518, in do_optTag
Module zope.tal.talinterpreter, line 513, in no_tag
Module zope.tal.talinterpreter, line 343, in interpret
Module zope.tal.talinterpreter, line 858, in do_defineMacro
Module zope.tal.talinterpreter, line 343, in interpret
Module zope.tal.talinterpreter, line 533, in do_optTag_tal
Module zope.tal.talinterpreter, line 518, in do_optTag
Module zope.tal.talinterpreter, line 513, in no_tag
Module zope.tal.talinterpreter, line 343, in interpret
Module zope.tal.talinterpreter, line 954, in do_defineSlot
Module zope.tal.talinterpreter, line 343, in interpret
Module zope.tal.talinterpreter, line 533, in do_optTag_tal
Module zope.tal.talinterpreter, line 518, in do_optTag
Module zope.tal.talinterpreter, line 513, in no_tag
Module zope.tal.talinterpreter, line 343, in interpret
Module zope.tal.talinterpreter, line 858, in do_defineMacro
Module zope.tal.talinterpreter, line 343, in interpret
Module zope.tal.talinterpreter, line 531, in do_optTag_tal
Module zope.tal.talinterpreter, line 513, in no_tag
Module zope.tal.talinterpreter, line 343, in interpret
Module zope.tal.talinterpreter, line 531, in do_optTag_tal
Module zope.tal.talinterpreter, line 513, in no_tag
Module zope.tal.talinterpreter, line 343, in interpret
Module zope.tal.talinterpreter, line 742, in do_insertStructure_tal
Module Products.PageTemplates.Expressions, line 218, in evaluateStructure
Module zope.tales.tales, line 696, in evaluate
- URL: /opt/plone/x0135809/buildout/eggs/collective.searchandreplace-8.0.0-py2.7.egg/collective/searchandreplace/browser/pageform.pt
- Line 92, Column 16
- Expression: <PathExpr standard:u'context/@@searchreplacetable'>
- Names:
{'args': (),
'container': <PloneSite at /mptest>,
'context': <PloneSite at /mptest>,
'default': <object object at 0x7f830cac9560>,
'here': <PloneSite at /mptest>,
'loop': {},
'nothing': None,
'options': {},
'repeat': <Products.PageTemplates.Expressions.SafeMapping object at 0x7f82ec2149f0>,
'request': <HTTPRequest, URL=http://icts-t-plone-7:11080/mptest/@@searchreplaceform>,
'root': <Application at >,
'template': <Products.Five.browser.pagetemplatefile.ViewPageTemplateFile object at 0x7f82f1efd4d0>,
'traverse_subpath': [],
'user': <PropertiedUser 'admin'>,
'view': <Products.Five.metaclass.SearchReplaceForm object at 0x7f82ec6b9f90>,
'views': <Products.Five.browser.pagetemplatefile.ViewMapper object at 0x7f82ec6a94d0>}
Module zope.tales.expressions, line 217, in __call__
Module Products.PageTemplates.Expressions, line 155, in _eval
Module Products.PageTemplates.Expressions, line 117, in render
Module Products.Five.browser.metaconfigure, line 485, in __call__
Module Products.Five.browser.pagetemplatefile, line 125, in __call__
Module Products.Five.browser.pagetemplatefile, line 59, in __call__
Module zope.pagetemplate.pagetemplate, line 132, in pt_render
Module zope.pagetemplate.pagetemplate, line 240, in __call__
Module zope.tal.talinterpreter, line 271, in __call__
Module zope.tal.talinterpreter, line 343, in interpret
Module zope.tal.talinterpreter, line 583, in do_setLocal_tal
Module zope.tales.tales, line 696, in evaluate
- URL: /opt/plone/x0135809/buildout/eggs/collective.searchandreplace-8.0.0-py2.7.egg/collective/searchandreplace/browser/searchreplacetable.pt
- Line 1, Column 0
- Expression: <PathExpr standard:u'view/getItems'>
- Names:
{'args': (),
'container': <PloneSite at /mptest>,
'context': <PloneSite at /mptest>,
'default': <object object at 0x7f830cac9560>,
'here': <PloneSite at /mptest>,
'loop': {},
'nothing': None,
'options': {},
'repeat': <Products.PageTemplates.Expressions.SafeMapping object at 0x7f82ecaf42b8>,
'request': <HTTPRequest, URL=http://icts-t-plone-7:11080/mptest/@@searchreplaceform>,
'root': <Application at >,
'template': <Products.Five.browser.pagetemplatefile.ViewPageTemplateFile object at 0x7f82f1f30bd0>,
'traverse_subpath': [],
'user': <PropertiedUser 'admin'>,
'view': <Products.Five.metaclass.SimpleViewClass from /opt/plone/x0135809/buildout/eggs/collective.searchandreplace-8.0.0-py2.7.egg/collective/searchandreplace/browser/searchreplacetable.pt object at 0x7f82ec6982d0>,
'views': <Products.Five.browser.pagetemplatefile.ViewMapper object at 0x7f82ec698c90>}
Module zope.tales.expressions, line 217, in __call__
Module Products.PageTemplates.Expressions, line 155, in _eval
Module Products.PageTemplates.Expressions, line 117, in render
Module collective.searchandreplace.browser.searchreplacetable, line 35, in getItems
Module collective.searchandreplace.searchreplaceutility, line 173, in findObjects
Module kuleuven.patches.language, line 31, in searchResults
Module Products.CMFPlone.CatalogTool, line 394, in searchResults
Module Products.ZCatalog.ZCatalog, line 610, in searchResults
Module Products.ZCatalog.Catalog, line 925, in searchResults
Module Products.ZCatalog.Catalog, line 547, in search
Module Products.ZCTextIndex.ZCTextIndex, line 217, in _apply_index
Module Products.ZCTextIndex.QueryParser, line 139, in parseQuery
ParseError: Query contains only common words: u'**'
Remove maintainer note
enPraxis is no more; feel free to remove the line about that entity maintaining the module.
ParseError when searching for a space
When the user searches for a space, an error occurs.
Version tested: 8.2.2 and the z3cform branch.
It looks like it might be related to #43
The traceback:
Traceback (innermost last):
Module ZPublisher.WSGIPublisher, line 181, in transaction_pubevents
Module ZPublisher.WSGIPublisher, line 390, in publish_module
Module ZPublisher.WSGIPublisher, line 285, in publish
Module ZPublisher.mapply, line 85, in mapply
Module ZPublisher.WSGIPublisher, line 68, in call_object
Module z3c.form.form, line 233, in __call__
Module plone.z3cform.fieldsets.extensible, line 62, in update
Module plone.z3cform.patch, line 31, in GroupForm_update
Module z3c.form.group, line 132, in update
Module z3c.form.form, line 136, in updateWidgets
Module z3c.form.contentprovider, line 65, in update
Module collective.searchandreplace.browser.searchreplacetable, line 31, in update
Module collective.searchandreplace.browser.searchreplacetable, line 55, in findObjects
Module collective.searchandreplace.searchreplaceutility, line 194, in findObjects
Module Products.CMFPlone.CatalogTool, line 429, in searchResults
Module Products.ZCatalog.ZCatalog, line 615, in searchResults
Module Products.ZCatalog.Catalog, line 1084, in searchResults
Module Products.ZCatalog.Catalog, line 627, in search
Module Products.ZCatalog.Catalog, line 557, in _search_index
Module Products.ZCTextIndex.ZCTextIndex, line 201, in query_index
Module Products.ZCTextIndex.QueryParser, line 155, in parseQuery
Products.ZCTextIndex.ParseTree.ParseError: Query contains only common words: '* *'
Affected content label has unexpected behavior
When the user made a search and on the result page clicks on "Affected content", the first search result checkbox toggles. This seems a bit strange, is this the intended behavior, or is something broken?
Tested on version 8.2.2 and on z3cform branch.
Allow replacing in all text fields
Currently, only the title, description and text field are searched and replaced.
I propose to go through all rich text fields. A client needs this. They have some content types with ten or more rich text fields. :-)
This needs to work for both Archetypes and Dexterity, but this should be doable: for the text field we already have code that can handle both cases.
Getting all text fields should be doable too. I have code in a different project that iterates over the schema to get all image fields, which I can probably adapt:
from plone.app.blob.interfaces import IBlobImageField
from plone.dexterity.utils import iterSchemata
from plone.namedfile.interfaces import INamedImageField
from zope.schema import getFieldsInOrder
...
image_fields = []
if getattr(aq_base(obj), 'Schema', None):
# Archetypes
for field in obj.Schema().values():
if not (IBlobImageField.providedBy(field) or
INamedImageField.providedBy(field)):
continue
image_fields.append(field)
else:
# Dexterity
for schemata in iterSchemata(obj):
fields = getFieldsInOrder(schemata)
for name, field in fields:
if not (IBlobImageField.providedBy(field) or
INamedImageField.providedBy(field)):
continue
image_fields.append(field)
# Now iterate over all fields, whether AT or dexterity.
for field in image_fields:
field_instance = field.get(obj)
Uninstall profile?
Are there plans for an uninstall profile?
Thanks in advance.
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. ๐๐๐
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google โค๏ธ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.