2011-01-22 25 views
5

Tôi muốn hiển thị trường mô hình help_text dưới dạng thuộc tính HTML title trong biểu mẫu, thay vì được thêm vào cuối dòng, làm mặc định.Có thể hiển thị văn bản trợ giúp mô hình dưới dạng thuộc tính tiêu đề trên biểu mẫu ở Django không?

Tôi thích tất cả thông tin về trường mô hình ở một nơi (trong chính Định nghĩa mô hình) và do đó, không muốn chỉ định title tùy chỉnh cho từng tiện ích. Nó là okay, tuy nhiên, nếu có một cách để xác định rằng các thuộc tính tiêu đề của mỗi vật dụng nên bằng với giá trị của help_text. Điều đó có thể không? Tôi đang tìm kiếm một cái gì đó để có hiệu lực của:

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

Cách duy nhất tôi có thể nghĩ đến việc này là tạo các tiện ích tùy chỉnh cho từng loại tiện ích con tích hợp sẵn. Có cách nào dễ dàng hơn, dễ dàng hơn để đạt được hiệu quả tương tự không?

Sử dụng Javascript cũng là một tùy chọn, nhưng điều đó thực sự sẽ chỉ là một phương sách rất xa cuối cùng. Tôi nghĩ rằng đây phải là một trường hợp sử dụng khá phổ biến; làm thế nào các bạn xử lý nó trong quá khứ?

Trả lời

3
Model._meta.get_field('field').help_text 

Trong trường hợp của bạn

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

gọn gàng, tôi không biết điều đó. Làm thế nào để ẩn 'help_text' để nó chỉ được hiển thị trong tiêu đề? –

+0

Bạn muốn ẩn nó trong một biểu mẫu? chỉ cần tạo biểu mẫu tùy chỉnh của riêng bạn http://docs.djangoproject.com/en/dev/topics/forms/#customizing-the-form-template – errx

+0

Vâng, bạn nói đúng. Chỉ cần lặp qua các trường của biểu mẫu sẽ thực hiện thủ thuật. Cảm ơn! –

2

Dưới đây là một cách khác để sử dụng một trang trí lớp học.

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 

Các trang trí lớp học được chuyển thể từ here

+0

Tốt. Thêm 'field.help_text = None' vào cuối vòng lặp' for' để tránh Django hiển thị 'help_text' hai lần. – SaeX

Các vấn đề liên quan