웹개발/Flask

여러 문장 진자 코드, for, if문 jinja, npoint, Jinja, {{ }}, {% %}, endfor, endif, npoint, json API

Olivia-BlackCherry 2022. 11. 17. 17:22

Jinja 마크업 언어를 배워보자.
지난 시간에는 한 줄로 작성하는 방법 ' {{ }} '을 배웠다면,
오늘은 for문과 if문처럼
여러 줄로 된 진자 코드를 작성하는 방법을 배우도록 하겠다.

npoint 웹사이트

이를 위해 npoint 웹사이트를 배울 것이다.
URL: npoint.io
npoint는 자신의 json데이터로 API를 만들 수 있는 사이트이다.
로그인, 회원가입, 인증키가 필요 없어 편리하다.

1) Json bin 생성하기

create JSON Bin을 클릭한다.



2) 데이터 입력하기

그리고 우리는 for문을 돌릴 것이므로, [ ] 리스트를 추가해준다.

[
  {
    "id": 1,
    "title": "플라스크",
    "subtitle": "플라스크 사용 방법",
    "body": "플라스크 설치, 객체 만들기, 라우트 데코레이터 생성하기, 디버그 모드 실행하기"
  },
  {
    "id": 2,
    "title": "html 파일",
    "subtitle": "html 파일 렌더링하기",
    "body": "render template 함수 실행하기, template 폴더 만들고 이동하기, kwarg 넣기, 진자 템플레이팅 언어로 파이썬 코드 실행하기"
  }
]

Json파일을 넣거나, 입력한 후 save를 클릭한다.
그리고나면 해당 URL을 입력하면 지금 페이지가 계속 나온다.


3) 형식 자동 고치기 & API 복사하기

autoformat을 클릭하면 형식을 자동으로 수정해줘서 깔끔하게 보여준다.
마지막으로 가장 아래에 api 주소를 복사한다.

플라스크 코드 작성하기 - for문

코드를 작성해보자.

main.py

from flask import Flask, render_template
import requests

app= Flask(__name__)

@app.route('/')
def my_blog():
    blog_url = "https://api.npoint.io/856de95eec43713720cd"
    response = requests.get(url=blog_url)
    print(response.raise_for_status())
    datas = response.json()
    return render_template("practice.html", blog_datas=datas)

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

practice.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    {% for data in blog_datas: %}
        <h1>{{ data['title'] }}</h1>
        <h2>{{ data['subtitle'] }}</h2>
        <p>{{ data['body'] }}</p>
    {% endfor %}
</body>
</html>

반복되는 구문의 시작의 첫 줄에서는 {%로 시작해서 %}로 끝내고,

{% for data in blog_datas: %}

반복되는 구문의 마지막 줄에서는 {%로 시작해서 end를 쓴 다음, 어떤 구문 for인지 표시해주고 %}로 닫는다.

{% endfor %}



<최종화면>

플라스크 코드 작성하기 - if문

{% for data in blog_datas: %}
    {% if data["id"]==1: %}
    <h1>{{ data['title'] }}</h1>
    <h2>{{ data['subtitle'] }}</h2>
    <p>{{ data['body'] }}</p>
    {% endif %}
{% endfor %}

<최종화면>