首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django templatetag根据字段标签返回字段

Django templatetag根据字段标签返回字段
EN

Stack Overflow用户
提问于 2012-12-08 08:09:43
回答 1查看 195关注 0票数 0

我知道字段标签(让我们说"BOP")。我想创建一个templatetag,它将返回正确的字段对象,这样我就可以在这样的形式中使用它。

代码语言:javascript
复制
{% with bop=form|f_lookup:"BOP"  %}
    <div>
        <div class="span-4">BOP</div>
        <div class="span-5">{{ bop }}</div>
    </div>
{% endwith %}

我的模板标签不工作了,我知道我一定是忽略了一些明显的东西..

代码语言:javascript
复制
@register.filter(name='f_lookup')
def field_lookup_by_label(form, arg):
    """Look up a form field based on a label"""
    return next((form.fields[k] for k, v in form.fields.items() if v.label == arg), None)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-08 09:42:52

试试这个:

代码语言:javascript
复制
return next((fld for fld in form if fld.label == arg), None)

如果这是可行的,那么原因如下。form.fieldsField对象的字典,它不知道如何在模板中呈现自己。只有当您调用表单的__getitem__函数时,字段才会转换为BoundField对象,该对象知道如何将自身呈现为HTML。参见https://github.com/django/django/blob/master/django/forms/forms.py的第101和412行。

当您返回form.fields的元素时,您只是返回一个Field子类,而不是BoundField,并且只有BoundField对象知道如何在模板中呈现自己。

此外,我认为如果不将标签作为关键字参数传递给bop字段构造函数,您的原始函数将无法工作。如果使用label=None调用构造函数,则Field对象的标签将为None。构造BoundField对象时,标签取自字段的标签,如果labelNone,则取自字段的名称。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13773009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档