[英]FLASK/PYTHON - Add strikethrough styling to todo list item in Flask app
我有一个待办事项列表,我可以在其中切换项目(标题)完成/未完成。 当我单击更新按钮以将项目标记为完成时,我想添加删除线。 我很高兴将它包装在数据库中的标签中,然后在我的页面上呈现它
下面是我的尝试,我可以点击按钮并将项目包装进去,但我无法在真/假之间切换以删除它只是不断添加它们的标签。
应用程序.py
from flask import Flask, Blueprint, render_template, request, redirect, url_for, current_app
from flask_sqlalchemy import SQLAlchemy
from app import app
todoapp = Blueprint("todoapp", __name__, static_folder="static", template_folder="templates")
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///db.sqlite'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
class Todo(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(100))
complete = db.Column(db.Boolean)
@todoapp.route("/update/<int:todo_id>")
def update(todo_id):
todo = Todo.query.filter_by(id=todo_id).first()
todo.complete = not todo.complete #toggle true/false for complete
if todo.complete == False:
todo.title = "<del>" + todo.title + "</del>" # add strikethrough tags to title
db.session.commit()
else
db.session.commit()
return redirect(request.referrer)
html
{% for todo in todo_list %}
<div class="ui segment">
<p class=""ui big header"> {{todo.id}} | {{todo.title}}</p>
{% if todo.complete == False %}
<span class="ui grey label"> Not Completed </span>
{% else %}
<span class="ui green label"> Completed </span>
{% endif %}
<a class = "ui blue button" href="/admin/update/{{ todo.id }}">Update</a>
</div>
{%endfor %}
1 - 不要使用filter_by(id=todo_id).first()
使用get(todo_id)
2 - if 语句不完整
if not todo.complete:
todo.title = "<del>" + todo.title + "</del>" # add strikethrough tags to title
db.session.commit()
else:
# remove the <del> tag
db.session.commit()
3 - 你不应该这样做,在 html 中添加标签
<p class=""ui big header"> {{todo.id}} |
{% if not todo.complete %}
<del>
{% endif %}
{{todo.title}}
{% if not todo.complete %}
</del>
{% endif %}
</p>
这不是最好的方法,我建议您从数据库中获取并稍后将结果处理到 html,并且在标记为未完成时不要使用标签更新标题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.