python - 如何获取以自定义 Plone 灵巧表单显示的字段?

标签 python forms plone dexterity

我试图避免在我的自定义 addform 中为 Plone 灵巧对象写出几百个字段。

我创建了一个从我的 customVisitFormTemplate.pt 调用的循环

    def otherFields2(self):
    #print "this gets called3"
    customs=""

    fields = field.Fields(ISiteVisit)

    #print dir(fields)
    for r in fields:
        #print dir(r)
        #print r.title()
        if r.startswith("current") or r.startswith("landCover") or r.startswith("surrounding"):
            pass

        else:
            print 'in others', r
            customs=customs+"""<tal:field tal:replace='structure view/widgets/%s/@@ploneform-render-widget'/>""" % (r)
    print customs
    return customs

在自定义模板中,我这样调用它:

    <fieldset>
      <legend>General Info</legend>
      <span tal:define="otherFields view/otherFields2">
        <div tal:content="structure otherFields" />
       </span>
    </fieldset>

但是,执行时 tal 语句不会调用小部件,而是输出到 html:

<tal:field tal:replace="view/widgets/siteID/@@ploneform-render-widget" />

如果我直接在自定义模板中使用以下代码:

<tal:field tal:replace="view/widgets/siteID/@@ploneform-render-widget" />

它输出为 html 并且可以工作:

<div id="formfield-form-widgets-siteVisitNotes" class="field z3cformInlineValidation kssattr-fieldname-form.widgets.siteVisitNotes">
<label class="horizontal" for="form-widgets-siteVisitNotes"> Site Visit Notes </label>
<div class="fieldErrorBox"></div>
<textarea id="form-widgets-siteVisitNotes" class="textarea-widget text-field" name="form.widgets.siteVisitNotes"></textarea>
</div>

如何从 .py 文件中获取循环代码以输出与“直接”代码相同的输出?

感谢您的建议

最佳答案

经过一番尝试后,我终于让这种复杂性发挥作用了:)。

      <fieldset>
            <legend>General Info</legend>
            <div>
                <metal:define define-macro="widget_rendering">    <!-- not sure if this define-macro is needed -->
                    <span tal:define="widgets view/widgets/values">
                        <tal:widgets repeat="widget python:[w for w in widgets if not w.name.startswith('form.widgets.current') and not w.name.startswith('form.widgets.surrounding') and not w.name.startswith('form.widgets.landCover')]">

                            <metal:field-slot define-slot="field">
                                <metal:field define-macro="field">
                                    <tal:widget tal:condition="python:widget.id !='form-widgets-url'"
                                        tal:replace="structure widget/@@ploneform-render-widget"/>
                                </metal:field>
                            </metal:field-slot>
                            <!--</span>-->
                        </tal:widgets>
                    </span>
                </metal:define>
                <br>    <!-- to keep label and input field together -->
            </div>
        </fieldset>

在调整页面大小时,标题和输入框保持在一起仍然存在问题,但排序代码可以工作。

关于python - 如何获取以自定义 Plone 灵巧表单显示的字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30926431/

相关文章:

python - 将 IP 地址散列为 [0, H) 中的数字

python - 使用 bool 值或序列对象获取 numpy 数组的 View (高级索引)

javascript - 使用ajax加载表单然后再次使用ajax提交

javascript - 表单控件不可聚焦

upgrade - Plone升级3.3.5至Plone 4.1.2

email - 删除项目时Plone发送两次电子邮件(内容规则)

python - 在 PyTorch 中快速计算模型参数的 Hessian 矩阵

python - 将字典值分配给变量,其中 key == list[element]

css - 表单按钮的 div 和 span css 样式

javascript - 如何在开发者 Facebook 中配置设置?