Попытка получить текст поиска, который будет помещен в URL - PullRequest
0 голосов
/ 04 апреля 2020

Я работаю в поисковой системе, в которой вы вводите текст, который вы хотите найти, в URL или в поле ввода ввода. Это работает нормально, когда я помещаю текст поиска в URL вручную, и результаты поиска отображаются нормально, но когда я отправляю запрос через окно поиска, текст не появляется в URL, например, это приводит к "http://127.0.0.1: 5000 / search / " или "http://127.0.0.1: 5000 / search /"вместо требуемого" http://127.0.0.1: 5000 / search / searchtext"

вот HTML формы:

<form action="{{url_for('search' , searched=searched)}}" method="post">
    <div class="search-box">
        <input type="text" name="" class="search-txt" placeholder="search..." name="searched"/>
        <button type="submit" class="search-btn"> 
        <i class="fas fa-search"></i>
        </button>
    </div>
</form>

и вот маршрут приложения Flask:

@app.route("/search/<string:searched>",methods=["POST","GET"])
def search(searched):
    if request.method=="POST":
        search=request.form.get("Searched")
        titles=db.execute("SELECT title FROM books WHERE title LIKE :search OR isbn LIKE :search OR author like :search or year LIKE :search"
        ,{"search":search}).fetchall()
        books=[]
        for title in titles:
            title=str(title).strip(" () [] \', \"")
            books.append(title)
        return render_template("searched.html",titles=books)
    if request.method=="GET":
        titles=db.execute("SELECT title FROM books WHERE title LIKE :search OR isbn LIKE :search OR author like :search or year LIKE :search"
        ,{"search":searched}).fetchall()
        books=[]
        for title in titles:
            title=str(title).strip(" () [] \', \"")
            books.append(title)
        return render_template("searched.html",titles=books)

я попытался изменить метод запроса формы на «GET» вместо «POST», а затем принять ввод из формы равным «искомому», как итак:

@app.route("/search/<string:searched>",methods=["GET"])
def search(searched):
    if request.method=="GET":
        searched=request.form.get("searched")
        titles=db.execute("SELECT title FROM books WHERE title LIKE :search OR isbn LIKE :search OR author like :search or year LIKE :search"
        ,{"search":searched}).fetchall()
        books=[]
        for title in titles:
            title=str(title).strip(" () [] \', \"")
            books.append(title)
        return render_template("searched.html",titles=books)

, но, похоже, это тоже не сработало и все равно вернул пустой URL-адрес, например: "http://127.0.0.1: 5000 / search / "

извините, если что-то очевидно, я все еще новичок в этом

спасибо большое заранее!

1 Ответ

0 голосов
/ 04 апреля 2020

В вашем коде есть несколько проблем:

  1. В поисковом текстовом поле в форме поиска есть два атрибута name, а первый пустой.

  2. Метод должен быть получен, если вы хотите увидеть искомую строку в адресной строке

  3. Когда вы отправите эту форму html, вы получите URL например: http://127.0.0.1:5000/search?searched=searchedtext, поэтому вы не можете использовать /search/<string:searched>, чтобы получить искомую строку

Итак, ваш код html будет выглядеть так:

<form action="{{url_for('search' , searched=searched)}}" method="get">
    <div class="search-box">
        <input type="text" class="search-txt" placeholder="search..." name="searched"/>
        <button type="submit" class="search-btn"> 
        <i class="fas fa-search"></i>
        </button>
    </div>
</form>

А вот код python:

@app.route("/search",methods=["GET"])
def search():
    if request.method=="GET":
        searched=request.args.get("searched")
        titles=db.execute("SELECT title FROM books WHERE title LIKE :search OR isbn LIKE :search OR author like :search or year LIKE :search"
        ,{"search":searched}).fetchall()
        books=[]
        for title in titles:
            title=str(title).strip(" () [] \', \"")
            books.append(title)
        return render_template("searched.html",titles=books)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...