13

私は次のようなフォームを持っています:

class MyForm(Form):

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

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

  #foobar data
  foobar = ChoiceField()

一部のフィールド(foobarなど)はデータベースから入力されるため、Djangoにform.as_ulでレンダリングさせる以外の方法を使用することはできません。

また、管理を容易にするためにフォームを複数のフォームに分割する必要がないことを望みます

これらのフォームセクションの間にヘルプテキストを表示するようにDjangoに指示して、フォームへの入力方法に関する指示を入力できるようにする方法はありますか?

フォームで次のようなものをレンダリングしたいのですが。

<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>

これらのタグを表示できるように独自のウィジェットを作成する必要があります<P>か、それとももっと簡単な方法がありますか?

ありがとう

4

8 に答える 8

15

form.as_ul を使用してテンプレートにフォームを表示せずにこれを行う 1 つの方法は、django-uni-form を使用することです。まず、ここからダウンロードしてインストールする必要があります。次に、フォームを設定するためのコードは次のようになります。

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)

これをテンプレートに表示するには、次のようにします。

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

これは、次のような HTML を (大まかに) 出力します。

<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>

uni_form の詳細については、ドキュメントを参照してください (上記のリンクを参照)。

PS: この返信が遅れていることは承知しています。この問題は既に解決していると思いますが、これは、今この問題に遭遇したばかりの人にとって役立つはずです。

于 2009-11-10T02:07:41.813 に答える
11

フォームをカスタマイズする場合は、レンダリングする必要はありませんform.as_ul。フォームモデルを適切に設定していれば、Django は foobar をレンダリングする方法を知っています...試してみてください...心配いりません。

サーバー上のどの python がページを送信したかを確認します。たとえば、次のような Django フォームを送信した場合:

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

次に、templateName.htmlは次のようになります。

<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>
于 2009-05-14T12:15:26.697 に答える
4

各セクションは複数の独立したフォームフィールドのコレクションであるため、カスタムフォームテンプレートを使用することをお勧めします。これにより、最小限の追加作業でレイアウトを完全に制御できます。Djangoのフォームテンプレートのカスタマイズドキュメントに詳細があります。

于 2009-04-07T23:19:00.773 に答える
2

DjangoFormオブジェクトは単なるフィールドのコレクションであることも忘れないでください。HTMLフォームタグとDjangoフォームオブジェクトを1対1で対応させる必要はありません。フォームのさまざまなセクションが実際に論理的に分離されている場合は、フォームを3つのフォームに分割し、それらの間に任意のHTMLを使用してテンプレートにレンダリングすることを検討できます(ただし、単一のHTMLフォームタグ内にあります)。

もちろん、これが賢明な解決策であるかどうかは、アプリのデザインとビューに大きく依存します。

于 2009-04-08T10:29:34.357 に答える
1

help_textご存知のフォームにフィールドがあります。

forms.pyで:

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

forms.htmlで:

  • {{form.myField.help_text}}
于 2010-01-11T17:55:35.403 に答える
0

フォームはデータベースから入力されますが、手動でフォームを書き出すか、テンプレートを使用できるはずです。詳細については、 Djangoフォームのドキュメントを確認してください。

于 2009-04-07T23:19:03.627 に答える
0

著者と同様の状況にある人には、フォームの または:before要素の CSS と:after疑似セレクターにフォールバックすることをお勧めします。それらは同様に機能し、引き続き使用できるため、生活がずっと楽になります。inputlabel{{ form.as_p }}

于 2010-07-27T12:41:15.117 に答える
-1

@mipadiに同意しましたが、それが最も簡単な方法のようです。

だから何か

$('.selector').append('<html></html>')
于 2015-05-24T13:59:26.997 に答える