Как добавить Stati c Path в Python кодировку в Flask? - PullRequest
0 голосов
/ 12 июля 2020

Я разрабатываю приложение типа поисковой машины. Мой код выглядит так:

def bm25searcher(queri,pagi):
    folders = loadfolders("files-clean/")
    xieon =""
    #query = sys.argv[1]
    query=queri
    results=[]
    page = pagi
    if(pagi==""):
        page = 1

    for folder in folders:
        files = loadfiles("files-clean/"+folder+"/")
        for filegotten in files:
            x  = removeemptylines(readpdf("pdf/"+folder+"/"+filegotten.replace("txt","pdf")))
            #results.append(str(tfidf_cosine_similarity(query,"files-clean/"+folder+"/"+filegotten))+",""files-clean/"+folder+"/"+filegotten.replace("txt","pdf")+","+abstract(x))
            results.append(str(bm25_cosine_similarity(query,"files-clean/"+folder+"/"+filegotten))+"~"+"<table width=\"100%\" border=\"1\"><tr><td width=\"88%\">"+filegotten.replace("txt","pdf")+"</td><td width=\"12%\">&nbsp;</td></tr><tr><td>"+abstract(x)+"</td><td><a href='"+"static/pdf/"+folder+"/"+filegotten.replace("txt","pdf")+"' target='_blank'>Read File</a></td></tr></table><br/>"+"~"+x)
    res = sorted(results,reverse=True)
    sentencebulk = ""
    for g in range (10*int(page)-10,10*int(page)):
            if int(g)<145:
                ming = res[g+1].split("~")
                xieon+=str(ming[1])
                sentencebulk = sentencebulk+" "+ming[2]+" "
    sio = wordclouder2(sentencebulk)
    return xieon+"</td><td rowspan=\"2\" width=\"100%\" align=\"left\" valign=\"top\">"+sio+"</td>"

Мой Flask Код ядра выглядит так:

app = Flask(__name__,template_folder="template/",static_folder="static/")

@app.route('/')
def hello_world():
    #return mainpage()
    return render_template("index.html")
@app.route('/tfidf/',methods=["POST", "GET"])
def tfidf():
    lig = ""
    page = ""
    if request.method == "POST":
        lig = request.form["textfield"]
        page = request.form['search']
    return render_template("tfidf.html",output=str(tfidfx(lig,page)))


@app.route('/bm25/',methods=["POST", "GET"])
def bm25():
    lig = ""
    page = ""
    if request.method == "POST":
        lig = request.form["textfield"]
        page = request.form['search']
    #return bm25x(lig,page)
    return render_template("bm25.html",output=str(bm25x(lig,page)))



    return xieon
# main driver function
if __name__ == '__main__':

    # run() method of Flask class runs the application
    # on the local development server.
    app.run()

Я хочу, чтобы код возвращал путь PDF в HTML из python, кодируя как:

http://127.0.0.1:5000/static/pdf/civil Appeal/somefile.pdf

Но он возвращает

http://127.0.0.1:5000/bm25/static/pdf/civil Appeal/somefile.pdf

Как я могу изменить этот код в python кодировке html, который дает stati c путь от базового URL, а не от страницы, которую он открыл? i.e url/static/ нет конец выглядит так:

введите описание изображения здесь

1 Ответ

0 голосов
/ 12 июля 2020

используйте функцию url_for() для создания URL

from flask import .., url_for

[..]

filename = f'pdf/{folder}/{filegotten.replace("txt", "pdf")}'
href = url_for( 'static', filename=filename )

[..]

, а затем

..
    '<a href="' +  href + '" target="_blank">Read File</a>'
..

посмотрите это руководство https://realpython.com/python-f-strings/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...