Python TabError:缩进中制表符和空格的使用不一致-集成MailChimp Django

Python TabError:缩进中制表符和空格的使用不一致-集成MailChimp Django,python,ajax,django,mailchimp,Python,Ajax,Django,Mailchimp,我刚刚使用Ajax将Mailchimp集成到我的Django项目中。“电子邮件地址”字段工作正常,我可以在邮件黑猩猩列表和数据库中获取电子邮件。现在,当我尝试添加一个允许用户将其名字添加到表单中的字段时,我经常会遇到类似这样的错误,例如:from.utils import sendsubscribebemail 文件“C:\Users\locq\Desktop\Coding\SEARCH\u APP\venv\src\SEARCH\utils.py”,第8行 self.fname=fname ^

我刚刚使用
Ajax
Mailchimp
集成到我的Django项目中。“电子邮件地址”字段工作正常,我可以在邮件黑猩猩列表和数据库中获取电子邮件。现在,当我尝试添加一个允许用户将其名字添加到表单中的字段时,我经常会遇到类似这样的错误,例如:
from.utils import sendsubscribebemail
文件“C:\Users\locq\Desktop\Coding\SEARCH\u APP\venv\src\SEARCH\utils.py”,第8行
self.fname=fname
^
TabError:缩进中制表符和空格的使用不一致

那么,我如何添加FNAME字段并在提交时将数据发送给mailchimp呢

这是我的密码:

在我的设置.p中,我在底部添加了Mailchimp凭据,如下所示:

MAILCHIMP_API_KEY = '767ba************-us6'
MAILCHIMP_SUBSCRIBE_LIST_ID = '45c*******'
我创建了一个utils.py文件以使用线程、Mailchimp包并从设置中导入我的凭据:

import threading
import mailchimp
from django.conf import settings

class SendSubscribeMail(object):
    def __init__(self, email, fname):
        self.email = email
        self.fname = fname
        thread = threading.Thread(target=self.run, args=())
        thread.daemon = True
        thread.start()

    def run(self):
        API_KEY = settings.MAILCHIMP_API_KEY
        LIST_ID = settings.MAILCHIMP_SUBSCRIBE_LIST_ID
        api = mailchimp.Mailchimp(API_KEY)
        try:
            api.lists.subscribe(LIST_ID, {'email': self.email}, merge_vars={'FNAME': self.fname}, double_optin=False)
        except:
            return False
自定义Def以获取输入名称:

def subscribe(request):
    if request.method == 'POST':
        fname = request.POST['fname_id']
        Subscribe.objects.create(fname_id = fname)
        email = request.POST['email_id']
        email_qs = Subscribe.objects.filter(email_id = email)
        if email_qs.exists():
            data = {"status" : "404"}
            return JsonResponse(data)
        else:
            Subscribe.objects.create(email_id = email)
            SendSubscribeMail(email, fname) # Send the Mail, Class available in utils.py
    return HttpResponse("/")
models.py用于在我的数据库的Subscribe表中添加电子邮件(和fname):

class Subscribe(models.Model):
    email_id = models.EmailField()
    fname_id = models.CharField(max_length=255, blank=True, null=True, default='')
    timestamp = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.email_id
我的html表单:

<div class="signup subs-form">

  <div class="header">
    <p>Sign Up For Beta</p>
  </div>
  <div class="description">
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna.</p>
  </div>

  <form method="POST" id="subscribe" class="subs-form">
    {% csrf_token %}
    <div>
      <input type="email" class="button-" id="email" name="email_id" placeholder="E-mail">
      <div class="input">
        <input type="text" class="button-" id="fname" name="fname_id" placeholder="First Name">
        <input type="submit" class="button-" id="submit" value="Join">
      </div>
    </div>
  </form>

</div>

注册测试版

知识产权是一种权利,是一种权利,是一种权利,是一种权利

{%csrf_令牌%}
最后,这里是我在页面底部的Ajax代码:

  $('#subscribe').submit(function(e){
      e.preventDefault();
      var email_id = $("#email").val();
      if(email_id){
        var csrfmiddlewaretoken = csrftoken;
        var fname_id = $("#fname").val();
        var email_data = {"email_id": email_id,
                          "fname_id": fname_id,
                          "csrfmiddlewaretoken" : csrfmiddlewaretoken};
        $.ajax({
          type : 'POST',
          url :  '/subscribe/',
          data : email_data,
          success : function(response){
            $('#email').val('');
            if(response.status == "404"){
              alert("This Email is already been subscribed!");
            }
            else{
              alert("Thank you for Subscribing! Please Check your Email to Confirm the Subscription");
            }
          },
          error: function(response) {
            alert("Sorry Something went Wrong");
            $('#email').val('');
          }
        });
        return false;
      }
      else{
        alert("Please provide correct email!");
      }
  });


function getCookie(name) {
    var cookieValue = null;
    if (document.cookie && document.cookie !== '') {
        var cookies = document.cookie.split(';');
        for (var i = 0; i < cookies.length; i++) {
            var cookie = jQuery.trim(cookies[i]);
            if (cookie.substring(0, name.length + 1) === (name + '=')) {
                cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                break;
            }
        }
    }
    return cookieValue;
}
var csrftoken = jQuery("[name=csrfmiddlewaretoken]").val();

function csrfSafeMethod(method) {
    return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
$.ajaxSetup({
    beforeSend: function(xhr, settings) {
        if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
            xhr.setRequestHeader("X-CSRFToken", csrftoken);
        }
    }
})
$(“#订阅”).submit(函数(e){
e、 预防默认值();
var email_id=$(“#email”).val();
如果(电子邮件地址){
var csrfmiddlewaretoken=csrftoken;
var fname_id=$(“#fname”).val();
var email_data={“email_id”:email_id,
“fname_id”:fname_id,
“csrfmiddlewaretoken”:csrfmiddlewaretoken};
$.ajax({
键入:“POST”,
url:“/subscribe/”,
数据:电子邮件数据,
成功:功能(响应){
$('#email').val('');
如果(response.status==“404”){
警报(“此电子邮件已被订阅!”);
}
否则{
提醒(“感谢您订阅!请检查您的电子邮件以确认订阅”);
}
},
错误:函数(响应){
警惕(“对不起,出了问题”);
$('#email').val('');
}
});
返回false;
}
否则{
提醒(“请提供正确的电子邮件!”);
}
});
函数getCookie(名称){
var-cookieValue=null;
if(document.cookie&&document.cookie!=''){
var cookies=document.cookie.split(“;”);
对于(变量i=0;i

如何实现这一点?

根据python文档,python不能为缩进混合制表符和空格,根据PEP-8,每个缩进级别应使用四个空格。当我尝试这样做时,它是正确的:

范围(20)内的i的
>:
“带制表符的缩进”
“用空格缩进”
SyntaxError:缩进中制表符和空格的使用不一致
如果您有一个python IDE,而不仅仅是将它们写入,比如记事本或文本编辑,那么它应该将每个选项卡转换为四个空格,或者(不推荐使用PEP-8)将每四个空格转换为一个选项卡


编辑:您可以使用
Ctrl+H
组合来查找/替换每个制表符和4个空格(这不会影响您的实际代码;字符串中的制表符应该是
'\t'

正如错误所述,有些行使用空格缩进,其他行使用制表符等,因此不一致。这与mailchimp无关。。。谢谢你的快速回答!那么我可以修正缩进吗?你看代码块,看行是如何缩进的,然后协调它们。例如,将所有内容都放在空格中。我不明白,我尝试过空格,但一直都会出现错误。请看。刚刚尝试了新模块,似乎比我给出的方法好多了:)