代码之家  ›  专栏  ›  技术社区  ›  Shobi

python django中的名称未定义错误

  •  0
  • Shobi  · 技术社区  · 6 年前
    import csv
    import io
    import re
    
    from django.http import HttpResponse
    from django.shortcuts import render
    from django.views import generic
    
    from ...forms import CsvUploadForm
    
    import pandas as pd
    
    
    class CsvImportView(generic.base.View):
        def getemailcolumn(self, sample):
            for key, val in sample:
               print(key, val)
               if re.match("^.+@([?)[a-zA-Z0-9-.]+.([a-zA-Z]{2,3}|[0-9]{1,3})(]?)$", val[0]) is not None:
                  return key
            return None
    
    
        def post(self, request):
            form = CsvUploadForm(request.POST, request.FILES)
    
            if form.is_valid():
               fieldnames = ['first_name', 'email', 'last_name']
    
               csv = pd.read_csv(request.FILES['csv'])
    
               sample =csv.head();
    
               emailColumn = getemailcolumn(sample)
    
               return HttpResponse(sample)
            else:
              ...
              ...
    

    当post方法被执行时,我得到一个name not defined错误

    未定义名称“getemailcolumn”

    我错过了什么?

    2 回复  |  直到 6 年前
        1
  •  2
  •   JPG    6 年前

    getemailcolumn() 是一个 实例方法 是的。它可以通过 self class instance 是的。在您的例子中,您试图从另一个实例方法访问它。所以应该是,

    emailColumn = self. getemailcolumn(sample)

        2
  •  -2
  •   K-D-G    6 年前

    您需要缩进get和post方法,因为python认为它们不是csvimportview类的一部分。所以将它们与调用的函数内联缩进。

    编辑: 好的,它需要是self.getMailColumn而不仅仅是函数名