2015-11-07 21 views
0

我正在使用Flask框架創建一個非常簡單的應用程序。我一直在順利進行,直到我爲Employee模型創建編輯/更新路線。我想要做的是讓員工更新他們的信息,當他們點擊提交時,sql_alchemy會發揮它的魔力。我遇到的問題是我的編輯網址正在打破它在手邊工作的位置。我在我的應用程序被戳,但我似乎無法得到它work.This是相關的代碼爲我編輯/更新操作:爲什麼我的編輯/更新路線中斷?

@app.route('/edit_employee/<id>', methods=['GET','PUT']) 
    def edit_employee(id): 

    if request.method == 'GET': 
     employee = Employee.query.get(id) 
     return render_template('edit.html', employee=employee) 
    else: 
     existing_employee = Employee.query.get(id) 
     updated_employee = Employee(request.form['name'], request.form['title'], 
          request.form['email'], request.form['department']) 
     file = request.files['profile_image'] 
     if file and allowed_file(file.filename): 
      filename = secure_filename(file.filename) 
      filename = updated_employee.name 
      # Destroy the old image first 
      os.remove(os.path.join(app.config['UPLOAD_FOLDER'], filename)) 
      file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename)) 
     existing_employee = updated_employee 
     db.session.commit() 
     return redirect(url_for('all_employees')) 

這裏是一個的layout.html文件。我懷疑問題位於我的form_action塊,但我不確定。我只是粘貼我的HTML視圖的一部分(它本質上是一個具有屬性的表單)。

<body> 
<div> 
    <form{% block form_action %}{% endblock %}> 
    <h2>{% block h2 %}{% endblock %}</h2> 
    <div class="control-group"> 
     <div class="controls"> 
     <label>Name</label> 
     <input type="text" id="name" name="name" 
      placeholder="Specify name" value="{{ request.form.name }}" 
      required> 
      ............. 

我編輯觀點:

{% extends "layout.html" %} 
{% block h2 %}Edit a Blackduck employee{% endblock %} 
{% block form_action %}action="{{ url_for('edit_employee') }}" enctype=multipart/form-data method=post class="form-horizontal"{% endblock %} 
{% block submit %}Update{% endblock %} 

我一直在使用Rails和Sinatra的工作有一段時間了,我根本就沒有用瓶的錯誤渲染。對於這個錯誤BuildError: ('edit_employee', {}, None)我不能確切地說出與Rails不同的是哪一行是問題。幫助將不勝感激。

+0

你'edit_employee'函數有一個名爲參數'id'但你不傳遞任何參數,當你調用' url_for'。 – dirn

回答

0

錯誤提示您正在嘗試訪問名爲edit_employee的路由,其參數爲零,但這種路由不存在。你edit_employee路線接受一個<id>參數,所以你需要調用這樣的路線:

{{ url_for('edit_employee', id = id) }}

+0

哦,那是什麼?我做了url_for('edit_employee/')。感謝您指出了這一點。順便說一句,你知道任何圖書館突出更好的錯誤。我相信我會習慣Flask的方式,但我只是想知道。謝謝。 –