【问题标题】:Add a prefix do Django comment form添加前缀做 Django 评论表单
【发布时间】:2010-04-07 11:05:04
【问题描述】:

我想为每个 django 评论表单添加一个前缀。我在同一页面中使用了多个评论表单,尽管它运行良好,但我不喜欢有许多具有相同 id 属性的输入字段,例如<input type="text" name="honeypot" id="id_honeypot" />

那么,有没有办法告诉 django 为每个表单实例添加前缀?我知道当我以这种方式创建表单实例时,我可以使用其他表单newform = CustomForm(prefix="a"),但使用 Django 的评论系统,这部分由评论模板标签 {% get_comment_form for [object] as [varname] %} 处理。

我可以告诉模板标签添加前缀吗?

【问题讨论】:

    标签: django django-forms


    【解决方案1】:

    嗯,我有个主意。添加您的custom comments form 并覆盖__init__。您可以从 target_object 生成前缀并将其设置为self.prefix

    def __init__(self, target_object, data=None, initial=None):
        ...
    

    或者更好,覆盖 BaseForm.add_prefix:

    def add_prefix(self, field_name):
        """
        Returns the field name with a prefix appended, if this Form has a
        prefix set.
    
        Subclasses may wish to override.
        """
        return self.prefix and ('%s-%s' % (self.prefix, field_name)) or field_name
    

    更新: 你是对的。前缀不起作用,主要原因是 contrib.cmets.views.cmets.post_comment 中的代码。所以我重新阅读了您的问题,如果您只需要更改“id”属性,请使用 BaseForm.auto_id:

    class CustomCommentForm(CommentForm):
        def __init__(self, target_object, data=None, initial=None):
            super(CustomCommentForm, self).__init__(target_object, data, initial)
            idprefix = target_object.__class__.__name__.lower()
            self.auto_id = idprefix + "_%s"
    

    【讨论】:

    • 我尝试以这种方式使用 add_prefix 是的,它很好地呈现了表单: > 但现在它让我错误: 它似乎不知道如何使用前缀来获取字段。任何想法?谢谢回复!
    猜你喜欢
    • 2019-02-08
    • 2020-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-12
    • 2018-10-03
    • 2016-12-04
    相关资源
    最近更新 更多