1

私は現在 web2py のユーザーですが、まだ時々 Django に戻ることがあります (最初に始めた場所)。具体的には、web2py にまだ存在しない特定の django アプリ/プラグイン/拡張機能を利用したいプロジェクトに取り組んでいるときです。

私が Django で解決策を探している web2py なしでは生きていけないことの 1 つは、db テーブルから html フォームを作成し、ビューでそれらの外観とレイアウトを javascript なしでカスタマイズできる方法です。 .

私が探している主なもの:

  1. db テーブルから html フォームを生成する
  2. 生成された html フォームの各フィールドにカスタム css クラス/id を割り当てます (js は無効)
  3. ビューのメソッド呼び出しを介して、事前に作成された html ビューに各フォーム フィールド/要素を配置します。

すなわち

私はテーブルAを持っています.web2pyでは(コントローラーで)できます:

def display_form():
   form = SQLFORM(db.table_A)
   #Can I do the following in Django? Assign custom CSS to each form field?
   form.element(_name='email')['_class'] = = "custom_css_classes, list"

   if form.accepts(request.vars, session):
       response.flash = 'form accepted'
   elif form.errors:
       response.flash = 'form has errors'
   else:
       response.flash = 'please fill out the form'
   return dict(form=form)

次に、ビューで次のことができます。

form.custom.start
form.custom.widget.name
form.custom.widget.email
form.custom.widget.form_field_name
           ...
<div class="span-5 last"><input type="submit" class="register_btn" value="Sign Up"></input></div>
form.custom.end

上記は DB テーブルを取得し、HTML フォームを作成し、事前に作成された HTML の任意の場所に個別のフォーム フィールドを貼り付けます (渡された「フォーム」オブジェクトでこれらの「カスタム」メソッド呼び出しを使用します。生成された HTML フォームの各フィールドに割り当てたカスタム CSS クラス。

上記のコードの詳細については、ドキュメントを参照してください。

http://web2py.com/book/default/chapter/06?search=define_table

http://web2py.com/book/default/chapter/07?search=sqlform#SQLFORM

http://web2py.com/book/default/chapter/05?search=#サーバー側のDOMと解析

http://web2py.com/book/default/chapter/07?search=form.custom

JavaScriptをレイアウトハックで汚さずに、Djangoで上記を行うにはどうすればよいですか。アプリを実行する必要があるブラウザーで JavaScript が無効になっていると仮定します。さらに、Django admin を活用したいと考えています。Pylons ソリューションも歓迎します!

このための記事/チュートリアル/ハウツーへのリンクをいただければ幸いです。また、応答で言及した方法を使用して、上記のコードと同等の結果を作成してください...

4

2 に答える 2

1

ModelForm明示的に宣言することで、カスタマイズしたいフィールドを使用およびオーバーライドします。

classやのようなフィールド属性を設定したい場合は、次のようidにする必要があります。

name = forms.CharField(
                widget=forms.TextInput(attrs={'class':'special'}))

興味がある場合は、クラスでfieldsシーケンスを指定してフィールドの順序を変更できます。Meta

class Meta:
    model = YourModel
    fields = ('title', 'content')

ここで完全なドキュメントを読むことができます: http://docs.djangoproject.com/en/dev/ref/forms/widgets/#django.forms.Widget.attrs

于 2010-08-08T04:08:56.287 に答える
1

まだお持ちでない場合は、Django のModelFormをご覧ください。問題のテーブルにモデルがマップされていると仮定しています。バニラModelFormインスタンスは JS なしで動作します。ただしModelForm、 s は通常、事前に定義されており、その場で構築されません。それらはその場で作成できると思いますが、それは少し難しいでしょう。

于 2010-08-07T19:20:40.590 に答える