2009-04-07 32 views
12

Tôi có một hình thức như sau:hiển thị một số văn bản miễn phí giữa các lĩnh vực Django Mẫu

class MyForm(Form): 

    #personal data 
    firstname = CharField() 
    lastname = CharField() 

    #education data 
    university = CharField() 
    major = CharField() 

    #foobar data 
    foobar = ChoiceField() 

Kể từ khi một số lĩnh vực (như foobar) đều được dân cư từ các cơ sở dữ liệu tôi không thể sử dụng một phương pháp khác hơn là để cho Django làm cho nó cho tôi với form.as_ul

Ngoài ra tôi muốn tôi không có để phân chia các hình thức trong nhiều hình thức để dễ mantainance

có cách nào để nói với Django để hiển thị một nội dung trợ giúp ở giữa những các phần biểu mẫu để tôi có thể đưa vào một số hướng dẫn về cách ghi l hình thức?

Tôi muốn các hình thức để làm cho một cái gì đó như thế này:

<form> 

    <p>Here you enter your personal data...</p> 
    <input name='firstname'> 
    <input name='lastname'> 

    <p>Here you enter your education data...</p> 
    <input name='university'> 
    <input name='major'> 

</form> 

tôi sẽ cần tạo phụ tùng của riêng tôi để có thể hiển thị các <P> thẻ, hoặc là có một cách dễ dàng hơn?

Cảm ơn

Trả lời

3

Vì mỗi phần là tập hợp nhiều trường biểu mẫu độc lập, tôi khuyên bạn nên sử dụng mẫu biểu mẫu tùy chỉnh. Điều này cho phép bạn kiểm soát hoàn toàn toàn bộ bố cục với công việc phụ tối thiểu. Tài liệu Customizing the Form Template của Django có các chi tiết.

+0

Đúng vậy, tôi cũng có thể sản xuất một số nội dung dựa trên fieldname – Lorenzo

0

Mặc dù biểu mẫu của bạn được điền từ cơ sở dữ liệu, bạn vẫn có thể viết biểu mẫu theo cách thủ công hoặc sử dụng mẫu. Hãy xem Django form documentation để biết thêm chi tiết.

1

Cũng nhớ rằng đối tượng Biểu mẫu Django chỉ là một tập hợp các trường; không cần phải có sự tương ứng 1: 1 giữa các thẻ biểu mẫu HTML và các đối tượng Biểu mẫu Django. Nếu các phần khác nhau của biểu mẫu thực sự tách biệt về mặt logic, bạn có thể xem xét tách nó thành ba Biểu mẫu, sau đó bạn có thể hiển thị trong mẫu của mình với bất kỳ HTML nào bạn muốn giữa chúng (nhưng vẫn nằm trong một thẻ biểu mẫu HTML).

Cho dù đây là giải pháp hợp lý phụ thuộc hoàn toàn vào thiết kế của ứng dụng và chế độ xem, tất nhiên.

9

Nếu bạn muốn tùy chỉnh biểu mẫu, bạn không phải hiển thị biểu mẫu đó form.as_ul. Django biết làm thế nào để làm cho foobar nếu bạn đã thiết lập các mẫu biểu mẫu đúng ... thử nó ... không phải lo lắng.

Nhìn vào những gì python trên máy chủ đã gửi trang của bạn. Ví dụ, nếu nó gửi một hình thức django như thế này:

return respond(request, user, 'templateName', { 'myform':myform })

sau đó templateName.html sẽ có:

<blockquote> 
<form> 

    <p>Here you enter your personal data...</p> 
    {{myform.firstname }} 

    <p>Here you enter your education data...</p> 
    {{myform.university }} 

    <p> a choice field </p> 
    {{myform.foobar}} 

</form> 
</blockquote> 
14

Một cách để làm điều này mà không hiển thị hình thức của bạn trong bản mẫu sử dụng hình thức .as_ul, là với django-uni-form. Trước tiên, bạn sẽ phải tải về nó here và cài đặt nó.Sau đó, các mã lập hình thức của bạn có thể trông giống như sau:

from uni_form.helpers import FormHelper, Submit, Layout, Fieldset 

class MyForm(Form): 

    #personal data 
    firstname = CharField() 
    lastname = CharField() 

    #education data 
    university = CharField() 
    major = CharField() 

    #foobar data 
    foobar = ChoiceField() 

    # now attach a uni_form helper to display the form 
    helper = FormHelper() 

    # create the layout 
    layout = Layout(
     # first fieldset 
     Fieldset("Here you enter your personal data...", 
      'firstname', 'lastname'), 
     Fieldset("Here you enter your education data...", 
      'university', 'major'), 
     Fieldset('foobar') 

    # and add a submit button 
    sumbit = Submit('add', 'Submit information') 
    helper.add_input(submit) 

Bây giờ, để hiển thị này trong mẫu của bạn, bạn sẽ làm điều này:

{% load uni_form %} 
{% with form.helper as helper %} 
    {% uni_form form helper %} 
{% endwith %} 

này sẽ ra HTML (xấp xỉ) như thế này :

<form> 
<fieldset><legend>Here you enter your personal data...</legend> 
<input name='firstname'> 
<input name='lastname'> 
</fieldset> 

<fieldset><legend>Here you enter your education data...</legend> 
<input name='university'> 
<input name='major'> 
</fieldset> 

<fieldset> 
<input name='foobar'> 
</fieldset> 

</form> 

Để biết thêm thông tin về uni_form, hãy đọc tài liệu của họ (xem liên kết ở trên).

PS: Tôi nhận thấy câu trả lời này là muộn và tôi chắc chắn rằng bạn đã giải quyết vấn đề này, nhưng tôi nghĩ điều này sẽ hữu ích cho bất kỳ ai chỉ gặp vấn đề này ngay bây giờ.

+0

doc nhanh chóng lớn để bắt đầu với uni-form –

1

Có trường help_text dưới các biểu mẫu mà bạn biết.

trong forms.py:

  • myField = forms.myFieldType(help_text="Helping friendly text to put in your form", otherStuff=otherStuff)

trong forms.html:

  • {{form.myField.help_text}}
0

Đối với những người có tình huống tương tự như tác giả, tôi khuyên bạn nên quay lại CSS và :before và/hoặc :after giả mạo trên các thành phần input hoặc label của biểu mẫu. Chúng hoạt động tốt và có thể làm cho cuộc sống của bạn dễ dàng hơn nhiều vì bạn vẫn có thể sử dụng {{ form.as_p }}.

0

đồng ý với @mipadi, có vẻ như đó là cách dễ nhất.

Vì vậy, một cái gì đó giống như

$('.selector').append('<html></html>') 
Các vấn đề liên quan