برای جستجو، یک فرم کوچک اضافه میکنیم که عبارت مورد نظر را از کاربر دریافت کند و سپس فقط آیتمهایی که شامل آن عبارت هستند را نمایش دهیم.
بهروزرسانی app.py برای جستجو
@app.route("/search", methods=["GET"])
def search_todo():
query = request.args.get("q", "").lower()
if query:
filtered = [todo for todo in todos if query in todo["task"].lower()]
else:
filtered = todos
return render_template("index.html", todos=filtered)
بهروزرسانی index.html برای فرم جستجو
<!DOCTYPE html>
<html lang="fa">
<head>
<meta charset="UTF-8">
<title>Todo App</title>
</head>
<body>
<h1>Todo List</h1>
<!-- فرم جستجو -->
<form action="{{ url_for('search_todo') }}" method="get">
<input type="text" name="q" placeholder="Search tasks">
<button type="submit">Search</button>
</form>
<form action="{{ url_for('add_todo') }}" method="post">
<input type="text" name="task" placeholder="New task" required>
<button type="submit">Add</button>
</form>
<ul>
{% for todo in todos %}
<li>
{{ todo.task }}
<a href="{{ url_for('edit_todo', todo_id=todo.id) }}">Edit</a>
<a href="{{ url_for('delete_todo', todo_id=todo.id) }}">Delete</a>
</li>
{% endfor %}
</ul>
</body>
</html>
حالا کاربر میتواند یک عبارت جستجو وارد کند و فقط تسکهایی که شامل آن عبارت هستند نمایش داده شوند. این کار با فیلتر کردن لیست در سرور و استفاده از Jinja انجام میشود.
نکته: این جستجو ساده است و حساس به حروف بزرگ و کوچک نیست، چون از lower() استفاده شده است.
با اتمام این قدم، یک CRUD کامل بدون دیتابیس با Flask داریم که شامل ایجاد، خواندن، ویرایش، حذف و جستجو میشود.