2017-10-12 62 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