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;)
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
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
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. –