2010-04-07 83 views
0

我想爲每個django評論表單添加一個前綴。我在同一頁面中使用了多個評論表單,並且它的工作表現良好,我不喜歡有許多具有相同id屬性的輸入字段,如<input type="text" name="honeypot" id="id_honeypot" />添加前綴do Django評論表

那麼,有沒有辦法告訴django爲每個表單實例添加一個前綴?我知道我可以用其他形式做到這一點,當我以這種方式創建一個表單實例newform = CustomForm(prefix="a"),但使用Django的評論系統,這部分是由評論模板標籤{% get_comment_form for [object] as [varname] %}處理。

我可以告訴模板標籤添加前綴嗎?

回答

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" 
+0

我試着用add_prefix這樣<高清add_prefix(個體經營,FIELD_NAME): self.prefix = 「test」 return self.prefix and('%s-%s'%(self.prefix,field_name))or field_name> and yes it render the form well:<> 但現在它引發了一個錯誤: 看來它不知道如何使用前綴來獲取字段。 有什麼想法? 感謝您的回覆! – 2010-04-09 10:50:20

+0

請參閱更新文本。 – 2010-04-09 21:14:37