2017-12-02 241 views
0

我有AWS上的S3存储桶列表。显示每个存储桶的名称,并试图使用django实现删除按钮。 我遇到的问题是我还不确定如何获取并传递存储桶名称变量到我有的删除函数。这是我到目前为止已经完成:Django删除按钮上的S3存储桶点击

DeleteBucketView.py

class deleteBucket(TemplateView): 
template_name = "project/delete_bucket.html" 

def deleteBucket(self, name): 
    s3 = boto3.resource('s3') 
    bucket = s3.Bucket(name) 
    bucket.delete() 

S3.html

<div class="s3Items"> 
    {% for bucket in buckets %} 
    <div class="s3Name"> 
    <div id="left"> 
     <a href="#"><h4 id='s3ItemName'>{{ bucket.bucketName }}</h4></a> 
    </div> 
    <div id="right"> 
     <ul id='s3ItemDesc'> 
     <li>{{ bucket.createdAt }}</li> 
      <li>{{ bucket.totalSize }}/4GB</li> 
     <li> 
      <form method="post" action="{% url 'project:deleteBucket' %}"> 
      {% csrf_token %} 
      <button type="submit" name="button" class='button delete'>Delete</button> 
      </form> 
     </li> 
     </ul> 
    </div> 
</div> 
{% endfor %} 

deletebucket.html是空的,因为我不知道我是什么可以进入那里。 当我点击删除按钮时,我需要调用函数deleteBucket,但是我需要将bucket的名称传递给该函数。我想我也需要在deleteBucket视图中定义文章,但我不知道如何从那里去。 如何将存储桶的名称传递给函数并使其工作?我需要在deleteBucket.html中添加任何内容吗?

感谢

回答

1

我不知道很多关于你的网址定义,但我认为这样的...

url(r'^delete-bucket/(?P<name>\w+)$', 'views.deleteBucket.as_view()', name='delete_bucket'), 

和修改您的看法是这样的...

class deleteBucket(TemplateView): 
    template_name = "project/delete_bucket.html" 

    def delete_operation(self, name): 
     s3 = boto3.resource('s3') 
     bucket = s3.Bucket(name) 
     bucket.delete() 

    def post(self, request, name): 
     self.delete_operation(name) 
     ... 

并在HTML中,你必须告诉名称

<form method="post" action="{% url 'project.delete_bucket' name=bucket.bucketNmae %}"> 
+0

虽然我如何调用函数? – davidb

+0

你的意思是调用deleteBucket的权利? –

+0

@davidb我已经更新了我的答案... –