2017-11-22 10 views
0

フラスコベースのブログで削除機能を実装するのに少し苦労しています。私はここで関連する記事を検索し、コメントをまとめて一緒にしようとしましたが、まだ動作していません。エントリIDがURLに通らないコードを実行すると思われます。それは私に 'ページが見つかりません'というエラーを出す。なぜこれが起こるのかについて助けを得ることは素晴らしいでしょう!フラスコ削除関数 - sqliteからローを削除する

これは私のPYです:

@app.route('/delete_entry/<entry_id>', methods=['POST']) 
def delete_entry(): 
    if not session.get('logged_in'): 
     abort(401) 
    db = get_db() 
    db.execute('delete from entries where id=' + entry_id) 
    db.commit() 
    flash('Entry deleted') 
    return redirect(url_for('show_entries')) 

、これが私のshow_entriesのPYです:

{% extends "layout.html" %} 
    {% block body %} 
     {% if session.logged_in %} 
     <form action="{{ url_for('add_entry') }}" method=post class=add-entry> 
      <dl> 
      <dt>Title: 
      <dd><input type=text size=30 name=title> 
      <dt>Text: 
      <dd><textarea name=text rows=5 cols=40></textarea> 
      <dd><input type=submit value=Share> 
      </dl> 
     </form> 

     {% endif %} 
     <ul class=entries> 
     {% for entry in entries %} 
     <li><h2>{{ entry.title }}</h2><h6>{{ entry.dt }}<h6><p>{{ entry.text|safe }}</p><p><{{ entry.id }}</p></li> 

     <form action="{{ url_for('delete_entry', entry_id = entry.id) }}" method=post class=delete-entry> 
     <input type="hidden" name="entry_id" value="{{ entry.id }}"> 
     <input type="submit" value="Delete" /> 
     </form> 

     {% else %} 
     <li><em>Unbelievable. No entries here so far</em></li> 
     {% endfor %} 
     </ul> 
    {% endblock %} 

これはdelete_entry.htmlです:

{% extends "layout.html" %} 
    {% block body %} 
     <ul class=entries> 
     {% for entry in entries %} 
     <li><a>{{entry.title }}</a> 
     <pre>{{ entry.text }}</pre> 
     {% if session.logged_in %} 
      <form action="{{ url_for('delete_entry') }}" method=post class=delete-entry> 
      <input type=hidden value="{{ entry.id }}"name=movie_to_delete"></input> 
      <input type=submit></input> 
      </form> 
     {% endif %} 
     {% endfor %} 
     </ul> 
    {% endblock %} 

答えて

0

[OK]を、多分これはですあなたのコードですが、そうでない場合には、url_for()を使用するときに、そのルートを表すフラスココード内の関数を持つ必要があります。明確にするために、あなただけのshow_entriesと呼ばれるHTMLテンプレートを持つことができない、あなたはテンプレートread about it here

@app.route('/show_entries') 
def show_entries(): 
    return render_template('show_entries.html') 

はまた、私はあなたが取得するユーザーのためにできるように、あなたの関数にGETメソッドを追加する必要があると思うことをレンダリングする機能を必要としますどのようなエントリIDを削除するかをhtmlフォームに指定します。

@app.route('/delete_entry/<entry_id>', methods=['GET', 'POST']) 
def delete_entry(): 
    if not session.get('logged_in'): 
     abort(401) 
    if request.method == 'POST' and form.validate_on_submit(): 
     db = get_db() 
     db.execute('delete from entries where id=' + entry_id) 
     db.commit() 
     flash('Entry deleted') 
     return redirect(url_for('show_entries')) 
    else #request.method == 'GET': 
     return render_template('delete_entry.html') 
関連する問題