我想为每个django评论表单添加一个前缀。我在同一页面中使用多个注释表单并且它的工作正常,我不喜欢有许多具有相同id属性的输入字段,如<input type="text" name="honeypot" id="id_honeypot" />
。
那么,有没有办法告诉django为每个表单实例添加前缀?我知道当我以这种方式newform = CustomForm(prefix="a")
创建表单实例时,我可以使用其他表单,但是使用Django的注释系统,这部分由注释模板标记{% get_comment_form for [object] as [varname] %}
处理。
我可以告诉模板标签添加前缀吗?
答案 0 :(得分:2)
好吧,我有个主意。添加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.comments.views.comments.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"