【问题标题】:Is it possible to show model help text as a title attribute on forms in Django?是否可以在 Django 中将模型帮助文本显示为表单的标题属性?
【发布时间】:2011-06-13 19:44:19
【问题描述】:

我想在表单中将模型字段 help_text 显示为 HTML title 属性,而不是像默认设置那样将其附加到行尾。

我喜欢所有关于模型字段的信息都在一个地方(在模型定义本身中),因此不希望为每个小部件指定自定义 title。但是,如果有办法指定每个小部件的标题属性应该等于help_text 的值,那也没关系。那可能吗?我正在寻找具有以下效果的东西:

widgets = {'url':TextInput(attrs={'title': help_text})}

我能想到的唯一另一种方法是为每个内置的小部件类型制作自定义小部件。有没有更简单、更懒惰的方法来达到同样的效果?

使用 Javascript 也是一种选择,但这实际上只是一个非常遥远的最后手段。我认为这必须是一个相当常见的用例;你们过去是怎么处理的?

【问题讨论】:

    标签: django forms models


    【解决方案1】:
    Model._meta.get_field('field').help_text
    

    你的情况

    widgets = {'url':TextInput(attrs={'title': Model._meta.get_field('url').help_text})}
    

    【讨论】:

    • 很好,我不知道。隐藏help_text 让它只显示在标题中怎么样?
    • 您想在表单中隐藏它吗?只需制作您自己的自定义表单docs.djangoproject.com/en/dev/topics/forms/…
    • 是的,你是对的。只需遍历表单的字段就可以了。谢谢!
    • 为了以后的参考,我发了一个帖子,说明我是如何让这一切一起工作的,ironzebra.com/news/10。这个问题还有其他一些有趣的方面。
    【解决方案2】:

    这是使用类装饰器的另一种方式。

    def putHelpTextInTitle (cls):
        init = cls.__init__
    
        def __init__ (self, *args, **kwargs):
            init(self, *args, **kwargs)
            for field in self.fields.values():
                field.widget.attrs['title'] = field.help_text
    
        cls.__init__ = __init__
        return cls
    
    @putHelpTextInTitle
    class MyForm (models.Form):
        #fields here
    

    类装饰器改编自here

    【讨论】:

    • 不错。在for 循环的末尾添加field.help_text = None 以避免Django 显示help_text 两次。
    猜你喜欢
    • 1970-01-01
    • 2013-08-13
    • 2011-04-13
    • 2023-03-27
    • 1970-01-01
    • 2012-02-05
    • 1970-01-01
    • 2019-07-06
    • 2014-10-31
    相关资源
    最近更新 更多