Не удалось добавить задачу в список задач

#python #html #flask

Вопрос:

Когда я пытаюсь добавить новую задачу на свой веб-сайт, я получаю сообщение об ошибке «ПУБЛИКАЦИЯ /шаблоны/задание» (404): «Не найдено» и не могу найти, что не так с кодом. Кто-нибудь может помочь мне разобраться в этом? Это было сделано с помощью программного обеспечения cs50ide. Если бы кто-нибудь мог также сообщить мне, могу ли я создать действующую ссылку для своего веб-сайта (я использую python, flask, html и css). Я был бы очень благодарен! Большое вам спасибо (странно, что это работало раньше…)

Код для add.html

 
<html lang="en">
    <head>
        <link href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" rel="stylesheet">
        <link href="/static/css/styles.css" rel="stylesheet">
        <title>
          Add a New Task :)
        </title>
    </head>
    <body>
        <h1 class = "aligncenter">
            <img class = "img1" src = "/static/images/logocarol.jpg" alt = "Logo" height = "200" width = "550"/>    
        </h1>
        <h1 class="centergeneral fontsize">
            Add any goals, dreams and aspirations you might have here:
        </h1>
        <form class="aligncenter" action="todo" method="post"> 
            <input id="task" name="task" type="text" placeholder="New Task :)">   
            <input id="submit" type="submit" disabled>
        </form>
        <script>
            document.querySelector('#task').onkeyup = function(){
                if (document.querySelector('#task').value === ''){
                    document.querySelector('#submit').disabled = true;
                } else {
                     document.querySelector('#submit').disabled = false;
                }
            }
        </script>
        
        <form action="/">
            <button type="submit" id = "back" class="btn btn-info margin"> BACK TO HOMEPAGE </button> <br> <br>
        </form>
        <form action="todo">
            <button type="submit" id = "back" class="btn btn-outline-info margin"> BACK TO TO DO LIST </button> <br> <br>
        </form>
    </body> 
 

Код для todo.html:

 
<html lang="en">
    <head>
        <link href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" rel="stylesheet">
        <link href="/static/css/styles.css" rel="stylesheet">
        <title>
          To Do List! :)
        </title>
    </head>
    <body>
        <h1 class = "aligncenter">
            <img class = "img1" src = "/static/images/logocarol.jpg" alt = "Logo" height = "200" width = "550"/>    
        </h1>
        <h1 class="fonts centergeneral"> To Do List </h1>
        <h2 class="fs-4 centergeneral"> What I Want to Achieve: </h2> <br>
        <ul class="listcenter">
            <script>
            {%for todo in todos%}
                <li> {{ todo }} <input type="checkbox" id="checkbox1"> </li> 
            {%endfor%}
            </script>
        </ul>
        
        <a class="btn btn-outline-info margin" href = "add"> Add a New Task</a>
        <a class="btn btn-outline-info" href = "clear"> Clear Tasks </a> <br>
        <div class="backbuttons">
        <form action = "/">
            <button type="submit" id = "back" class="btn btn-info"> BACK TO HOMEPAGE </button> <br> <br>
        </form>
        </div> 
 

Код для application.py

 from flask_session import Session
from cs50 import SQL

app = Flask(__name__)
app.config["SESSION_PERMANENT"] = False
app.config["SESSION_TYPE"] = "filesystem"
Session(app)

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

@app.route('/f1inschools')
def f1():
    return render_template('f1inschools.html')
    
@app.route('/pdwt')
def pdwt():
    return render_template('pdwt.html')
    
@app.route('/pros')
def pros():
    return render_template('pros.html')
    
@app.route('/bookrecommendations')
def books():
    return render_template('bookrecs.html')
    
@app.route('/todolist')
def todo():
    if "todos" not in session:
        session["todos"] = []
    return render_template('todo.html', todos=session["todos"])
        
@app.route('/clear')
def clear():
    return redirect("/todolist")
    session["todos"] = []
        
@app.route('/add', methods=["GET", "POST"])
def add():
    if request.method == "GET":
       return render_template("add.html")
    else:
        todo = request.form.get("task")
        session["todos"].append(todo)
        return redirect("/todolist")```
 

Комментарии:

1. Вы отправляете форму по неправильному URL-адресу.

Ответ №1:

Вы отправляете форму по неправильному URL-адресу.

 <form class="aligncenter" action="todo" method="post"> 
 

Должно быть,

 <form class="aligncenter" action="/todolist" method="post"> 
 

Комментарии:

1. Я изменил его, и он по-прежнему не работает…

Ответ №2:

Если все ваши шаблоны хранятся в папке шаблонов, внесите это изменение app .

 app = Flask(__name__, template_folder="templates", static_folder='static')
 

Вам также необходимо изменить URL-адрес, по которому отправляется форма,
/todolist а также внести это изменение в application.py

 @app.route('/todolist', methods=["GET", "POST"])
 

add.html

         <form class="aligncenter" action="/todolist" method="POST"> 
            <input id="task" name="task" type="text" placeholder="New Task :)">   
            <input id="submit" type="submit" disabled>
        </form>
 

Комментарии:

1. попробовал это, но все равно получаю ошибку «POST /todolist» (404): ошибка «Не найден»…

2. Вы должны изменить URL-адрес в форме в add.html тоже. Я обновил код. Это работает на меня.

3. Я сделал это точно так же, как ты, но это все еще не работает для меня. Знаете ли вы, что может быть причиной проблемы?

4. На самом деле я не уверен. Я смог добавить задачу, и она перенаправила меня на /todolist . У вас, должно быть, где-то опечатка.

5. Правильно ли мое утверждение «за»? а также изменение, о котором вы мне сказали, чтобы я сделал в приложении. py относится к функции //тодолист, верно? функция добавления остается прежней. Большое вам спасибо за вашу поддержку