2017-10-12 58 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) 

我想知道我的過程是否正常?這是一種更好的編程方式,而不是我所做的?

然後,我得到這個錯誤:name 'IndividuResume' is not defined

我怎麼能寫我的方法在我的Django的模板?

謝謝

+0

你試過[FormView](https://docs.djangoproject.com/en/1.11/ref/class-based-views/generic-editing/#django.views.generic.edit.FormView)嗎? –

+0

@BearBrown我從來沒有使用過'通用編輯視圖':/你認爲我的過程是錯誤的嗎?我想在可能的情況下簡化我的腳本和調用函數,因爲我的視圖中有很多次相同的腳本部分。 – Deadpool

+1

我想[class-based-views](https://docs.djangoproject.com/en/1.11/ref/class-based-views/)創建django項目的最好方法。 –

回答

2

它看起來像錯誤是因爲'IndividuResume'應該是一個字符串,而不是一個變量名。

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'。但我在我的視圖上下文中定義了'form'而不是在'DjangoFormID'中,所以我得到這個問題:'name form is not defined' – Deadpool

+0

好吧,我會看看你的所有建議!我對Django(以及編程)非常感興趣,並且來自像你這樣的人的一些建議非常有趣!謝謝 :) – Deadpool