본문 바로가기
프로그래밍 관련/파이썬

플라스크에 대하여(3).url_for 함수

by 존버매니아.임베디드 개발자 2021. 4. 27.
반응형

※ 참고로 이 글의 내용은 이미지,동영상 뿐만 아니라 css파일. 자바스크립트 파일 등등 외부파일의 주소를 지정하는 모든 경우에 해당된다.


웹페이지에 이미지. 동영상 등을 올리기 위해서
img 태그. video 태그 등을 사용하게 된다.


이러한 태그들을 사용할 때는 src 라고 해당 이미지.혹은 영상의 위치를 적어주어야한다.

이때 우리는 상대경로를 통해 파일의 경로를 지정해주게 된다.

그렇게 주소를 적고나서 html 파일을 로컬에서(본인 pc)에서 열어보면 영상과 그림이 정상적으로 출력됨을 알 수 있다.


그런데, 해당 html 파일을 플라스크를 통해서 제공하면, 플라스크는 이미지와 동영상의 위치를 제대로 인식하지 못하여 클라이언트(방문자)에게 정보를 제공하지 못한다.

이 때 사용되는 api가 url_for api이다.
위 api를 사용하지 않으면 플라스크는 이미지. 동영상 등을 제대로 출력해주지 못한다.

사용방법은 어렵지 않다.

from flask import Flask , render_template
app = Flask(__name__)

@app.route("/")
def hello():
    return render_template('index.html')

@app.route("/page1")
def Test1():
    return "안녕하세요"

if __name__ == "__main__":
    app.run()

위와 같은 코드를 사용해서 플라스크 서버를 돌리면,

main page에서 index.html 을 띄어줄 것이다.

아래는 그림 한개를 띄어주는 html파일이다.

<!doctype html>
<html>
    <head>
        <title>"렌더링 페이지 예시</title>
    </head>
    <body>
        <H2>example 1</H2>
        <img src="{{ url_for('static', filename='temp.png') }}">
        
    </body>
</html>

근데 img src에서 경로를 지정하는 부분에 url_for 어쩌구 하는 부분이 들어간 모습을 볼 수 있다.

원래 img_src 태그는 어떻게 쓰냐면 아래와 같은 형태로 사용한다.

<img src="folder/temp.png">

근데 플라스크 서버를 돌릴 때 html 파일에서 주소를 저런 형태로 해놓으면

클라이언트에게 그림을 띄어주질 못한다.

그래서 url_for 이라는 함수를 사용해야한다.

 

여기서 유의사항이 있는데,

앞에 render_templates와 유사하게,

플라스크 코드가 실행되는 파이썬 코드 경로에서 static이라는 폴더를 만들고 ,그 폴더 하위에 그림을 넣어놔야 한다.

 

 

 

 


근데 불편한 것이.. 플라스크로 서비스를 제공하려면 url_for api를 써야하는데 이 함수를 로컬 pc는 알아먹지 못하기 때문에
작업 결과물을 로컬에서 열어볼때 사용하기가 불편하더라.

 

반응형