2012-04-12 21 views
8

Tôi đang gặp vấn đề nhỏ (nhưng gây phiền nhiễu) với các dạng django ngay bây giờ.django crispy-forms & floppyforms w/bootstrap: làm thế nào để có được help_text thành một ModelForm?

Tôi đang sử dụng:

  • twitter bootstrap
  • floppyforms django (chỉ dành cho các widget html5)
  • django giòn-hình thức (đối với mẫu thẻ & rendering)
  • hình thức của tôi là tất cả ModelForms và không được thay đổi nếu có thể

Tôi đã tìm kiếm trên toàn bộ web và đã thử rất nhiều nội dung, nhưng tôi không thể tìm ra nơi tôi có thể tiêm help_text = "Một số văn bản trợ giúp ngẫu nhiên" vào mã. Vì vậy, đây là mã của tôi (viết tắt vì lý do sự tỉnh táo):

#forms.py: 

import floppyforms as forms 
from crispy_forms.helper import FormHelper 
from crispy_forms.layout import * 
from crispy_forms.bootstrap import * 
from courses.models import * 

class CourseForm(forms.ModelForm): 
    class Meta: 
    model = Course 
    widgets = { 
     'title': forms.TextInput, # This is a floppyforms widget 
     ... 
    } 

    def __init__(self, *args, **kwargs): 
     self.helper = FormHelper() 
     self.helper.form_method = 'POST' 
     self.helper.form_id = '' 
     self.helper.form_class = 'form-horizontal' 
     self.helper.form_action = '' # redirect in the view 
     self.helper.form_tag = True 
     self.helper.help_text_inline = True # means that I want <span> elements 
     self.helper.layout = Layout(
      Fieldset('Create a new course', # fieldset label 
       Field('title', placeholder="Something...", css_class="span4"), 
       ... 
      ), 
      FormActions(
       Submit(
        'submit', 
        'Submit', 
        css_class="btn-primary" 
       ) 
      ), 
     ) 
     super(CourseForm, self).__init__(*args, **kwargs) 

Tôi cố gắng để bơm nó như một dict 'attrs' vào widget và là một attr vào Field.

forms.TextInput(attrs={'help_text': 'Some help text'}) 
Field('title', help_text="Some help text", css_class="span4") 

Không cần phải nói là nó không hoạt động. Tôi cần một móc để đặt văn bản trợ giúp vào một 'span' hoặc 'p' bên trong control-div của tôi, không phải vào widget đầu vào.

Mẫu của tôi rất nhỏ và nên giữ nguyên cách đó nếu có thể. Tôi không muốn để lặp qua các trường mẫu:

#create_course.html 

{% extends 'base.html'%} 
{% load crispy_forms_tags %} 

{% block content%} 
{% crispy form %} 
{% endblock content%} 

Đó ám như html sau:

<div id="div_id_title" class="clearfix control-group"> 
    <label class="control-label requiredField" for="id_title"> 
    Title 
    <span class="asteriskField">*</span> 
    </label> 
    <div class="controls"> 
    <input id="id_title" class="span4 textinput textInput" type="text" placeholder="Something..." maxlength="60" required="" name="title"> 
    </div> 
</div> 

Với nội dung giúp đỡ nó sẽ giống như thế này:

<div id="div_id_title" class="clearfix control-group"> 
    <label class="control-label requiredField" for="id_title"> 
    Title 
    <span class="asteriskField">*</span> 
    </label> 
    <div class="controls"> 
    <input id="id_title" class="span4 textinput textInput" type="text" placeholder="Something..." maxlength="60" required="" name="title"> 
    **<span class="help-inline">Supporting help text</span>** 
    </div> 
</div> 

Bất kỳ trợ giúp được đánh giá cao! Tôi đã không cố gắng để tiêm mã thông qua views.py vào mẫu, nhưng tôi thấy không có điểm trong việc đó. Có thể thực hiện điều đó trong forms.py bằng móc và cú pháp đúng.

Xin lỗi vì văn bản dài cho một vấn đề đơn giản như vậy;)

+0

Ok tôi đã phát hiện ra vấn đề là gì. Vì tôi không thực sự xác định các Trường ở bất kỳ đâu (tôi chỉ xác định các tiện ích trường), tôi không thể truy cập help_text. Bạn có thể xác định các trường trong forms.py (thực hành không cần thiết và không đúng, chúng là ModelFields. DRY!) Hoặc đặt help_text cho mô hình trong models.py. – tiwei

+0

Tôi rất vui khi bạn làm việc đó. Tốt hơn là chỉ định help_text trong các mô hình. Nhưng bạn cũng có thể ghi đè các trường mà không cần định nghĩa lại trường, xem trang 34 tại đây https://speakerdeck.com/u/maraujop/p/advanced-django-forms-usage – maraujop

+1

Bạn có thể đăng nhận xét của mình làm câu trả lời và chấp nhận không? Bằng cách đó nó không hiển thị như một câu hỏi chưa được trả lời. –

Trả lời

8

Tôi đã phát hiện ra vấn đề là gì. Vì tôi không thực sự xác định các Trường ở bất kỳ đâu (tôi chỉ xác định các tiện ích trường), tôi không thể truy cập help_text. Bạn có thể xác định các trường trong forms.py (thực hành không cần thiết và không hợp lệ, sau đó là ModelFields) hoặc đặt help_text cho mô hình trong models.py.

Hy vọng rằng sẽ giúp những người khác có vấn đề tương tự.

+1

Chỉ cần thêm vào đó, nếu vì một lý do nào đó bạn không muốn sử dụng tập hợp văn bản trợ giúp trong mô hình, bạn luôn có thể truy cập các trường được tạo trong phương thức '__init__' của ModelForm. –

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