2017-10-12 6 views
0

私はDjango Webアプリケーションを改良し、主にプロジェクトスクリプトを探しています。 私は何度も同じPythonコードを使用しています。私はviews.pyファイルを単純化したいと思います。メソッドでDjangoビューを改善する

例えば、私はこの部分を数回持っている:

if request.method == 'POST': 

    form = FormBase(request.POST or None, request.FILES or None) 

    if form.is_valid() : 
     post = form.save() 

     return HttpResponseRedirect(reverse('ReverseTemplate', kwargs={'id': post.id})) 

else : 
    form = FormBase() 
    form.fields['Utilisateur'].initial = request.user.last_name + " " + request.user.first_name 

ので、コピーの代わりに/私の異なるビュー機能ではこの部分を過ぎ、私が設定したいと思います:

def DjangoFormID(request, FormBase, ReverseTemplate) : 

    if request.method == 'POST': 

     form = FormBase(request.POST or None, request.FILES or None) 

     if form.is_valid() : 
      post = form.save() 

      return HttpResponseRedirect(reverse('ReverseTemplate', kwargs={'id': post.id})) 

    else : 
     form = FormBase() 
     form.fields['Utilisateur'].initial = request.user.last_name + " " + request.user.first_name 

そして、私の見解でこの関数を呼び出してください:

DjangoFormID(request, IndividuFormulaire, IndividuResume) 

私のプロセスはうまくいきますか?それは私がやったことよりもプログラミングにとってより良い方法ですか?私は私のメソッド内で私のDjangoテンプレートを書くことができますどのようにname 'IndividuResume' is not defined

その後、私はこのエラーを取得していますか?

'IndividuResume'が文字列ではなく、変数名にする必要がありますので誤差があるように見えます

+0

あなたは[FormViewコントロール](https://docs.djangoproject.com/en/1.11/ref/class-based-views/generic-editing/#django.views.generic.edit.FormView)を試してみたのですか? –

+0

@BearBrown私は 'Generic editing views'を一度も使ったことがありません:/私のプロセスは偽であると思いますか?私は私の視点で何度も同じスクリプト部分を持っているので、私のスクリプトを簡素化し、関数を呼び出すことができるようにするために関数を呼びたいと思います。 – Deadpool

+1

私は[クラスベースのビュー](https://docs.djangoproject.com/en/1.11/ref/class-based-views/)djangoプロジェクトを作成する最良の方法だと思います。 –

答えて

2

ありがとうございます。テンプレート内

DjangoFormID(request, IndividuFormulaire, 'IndividuResume') 

、あなたは変数ReverseTemplate、ないハードコードされた文字列'ReverseTemplate'

return HttpResponseRedirect(reverse(ReverseTemplate, kwargs={'id': post.id})) 

を使用する必要があり、各ビューで同じ定型を含むことの利点は、それが起こっているものをフォローするのは非常に簡単だということですに。繰り返しが心配な方は、このようなユースケースに合わせて設計されているため、クラスベースのビューを検討することを検討します。私は自分自身を定義することを避けるだろうDjangoFormID - もし私があなたのプロジェクトに慣れていれば、私はDjangoFormID(request, IndividuFormulaire, 'IndividuResume')が何をしたのか分からないだろう。

あなたはここに、あなたのDjangoFormID方法に固執ない場合は、勧告のカップルです:

  • は、それが常に応答を返すことを確認してください。現時点では、有効なフォームのリダイレクト応答が返され、残りの時間はNoneとなり、問題が発生します。
  • 私が見るときDjangoFormID私はそれがクラスではなく、関数であると仮定します。名前をdjango_form_idに変更します。
+0

私は間違いを犯したところを見ています。クラスベースのビューについてもっと学ぶ前に、少し質問があります。私の関数 'DjangoFormID'には変数' form'があります。しかし、私は 'DjangoFormID'ではなく、私のビューの文脈で' form'を定義しました。この問題は 'name form is not defined'です。 – Deadpool

+0

Okあなたのお勧めをすべて見ていきます!私はDjango(とプログラミング)でかなり新しく、あなたのような人々からのアドバイスは非常に面白いです!ありがとうございました :) – Deadpool

関連する問題