본문 바로가기

웹개발

게시판(flask)-제목, 내용 기준 검색

<form method="get" action="{{ url_for('search') }}">
    <select name="search_type">
        <option value="title">제목</option>
        <option value="content">내용</option>
    </select>
    <input type="text" name="query" required>
    <button type="submit">검색</button>
</form>

검색을 위해서 board.html 에 검색 form을 추가하였다.

@app.route('/search')
def search():
    search_type = request.args.get('search_type')
    query = request.args.get('query')
    
    conn = connectsql()
    cursor = conn.cursor(pymysql.cursors.DictCursor)
    
    if search_type == 'title':
        cursor.execute("SELECT * FROM posts WHERE title LIKE %s", ('%' + query + '%',))
    elif search_type == 'content':
        cursor.execute("SELECT * FROM posts WHERE content LIKE %s", ('%' + query + '%',))
    
    posts = cursor.fetchall()
    conn.close()
    
    return render_template('search_results.html', posts=posts)

검색을 위해 search 링크를 만들었다.

제목으로 검색할건지, 내용으로 검색할건지에 대한 정보를 search_type으로 받고 검색을 해서 posts에 담는다.

posts를 search_results.html 로 보내준다.

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>검색 결과</title>
    </head>
<body>
    <h1>검색 결과</h1>
    {% for post in posts %}
        <h2><a href="{{ url_for('read', id=post.id) }}">{{ post.title }}</a></h2>
    {% endfor %}
    <a href="{{ url_for('board') }}">목록으로</a>
</body>
</html>

search_results.html 파일에서는 그냥 받은 posts의 목록을 띄워준다.