Flask:从服务器和数据库中删除文件

时间:2017-05-26 11:52:46

标签: python flask jinja2

我想要完成的工作就是从服务器删除文件('静态'文件夹,具体)。

我的jinja模板:

<table>
   <tr>
   {% for file in files_.items %}
      <td data-title="title" style="text-align: center">{{ file.title }}</td>
      <td data-title="download"><a href="{{ url_for('static', filename=file.file) }}">Download</a></td>
      {% if current_user.username == "admin" %}
         <td data-title="delete" style="text-align: center"><a href="{{ delete }}">Delete</a></td>
      {% endif %}
      </tr>
   {% endfor %}
</table>

和我的职能:

@app.route('/upload/<path:filename>/', methods=['GET', 'POST'])
@login_required
def delete(filename):
    item = db.session.query(File).get(filename)
    os.remove(os.path.join(app.static_folder, item.filename))
    db.session.query(File).filter_by(file=filename).delete()
    db.session.commit()
    return render_template('dashboard.html',delete=delete)

我尝试做的是点击html中的删除后,我想从服务器中删除数据库和文件中的记录。现在我不确定我调用此函数的方法是否正确,因为我已经尝试使用print作为原始日志系统,并且终端中没有任何东西,我会说函数没有被调用。另外我的猜测是我需要将文件名传递给它,所以我尝试了

{{ delete(filename=file.file) }}

但它返回了

  

UndefinedError:&#39;删除&#39;未定义

1 个答案:

答案 0 :(得分:2)

模板中的

{{ delete(filename=file.file) }}告诉python“何时呈现模板,调用函数delete()”。您要做的是生成链接,单击此链接将调用删除端点。 因此,请使用{{ url_for('delete', filename=...) }}