Flask 프레임 워 크 Jinjia 템 플 릿 상용 문법 총화

본 논문 의 사례 는 Flask 프레임 워 크 Jinjia 템 플 릿 에서 자주 사용 하 는 문법 을 정리 했다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
1.변수 표시

{{ argv }}

2.할당 작업

{% set links = [
  ('home',url_for('.home')),
  ('service',url_for('.service')),
  ('about',url_for('.about')),
] %}

3.판단 하 는 경우

{% if not loop.first %}|{% endif %}

4.순환

{% for label,link in links %}
   {% if not loop.first %}|{% endif %}
   <a href="{{ link }}" rel="external nofollow" >{{ label }}</a>
{% endfor %}

5.테스트 함수 정의
loop.first는 테스트 함수 입 니 다.이것 도 사용자 정의 할 수 있 습 니 다.
정 의 는 Sample.py 에서 정 의 됩 니 다.current_linkHTML 에서 테스트 함수 이름 을 사용 할 수 있 습 니 다.(선택 가능)

@app.template_test('current_link')
def is_current_link(link):
  return link == request.path

HTML 에서 사용 예

<body>
{% set links = [
  ('home',url_for('.home')),
  ('service',url_for('.service')),
  ('about',url_for('.about')),
] %}
<nav>
  {% for label,link in links %}
    {% if not loop.first %}|{% endif %}
    <a href="{% if link is current_link %}#
    {% else %}
    {{ link }}
    {% endif %}
    ">{{ label }}</a>
  {% endfor %}
</nav>
</body>


6.블록 블록
Flask 가 강 한 곳 에 서 는 템 플 릿 을 참조 할 수 있 고 편리 합 니 다.
블록 이라는 개념 을 소개 해 야 합 니 다.
템 플 릿 의 파일 은 보통 templates 폴 더 아래 에 놓 여 있 습 니 다.HTML 파일 을 새로 만 들 고 템 플 릿 을 저장 합 니 다.'base.html'
이 안에서 도 전체 페이지 의 레이아웃 을 편 성 했 고 그 안에 많은 block 의 자리 표시 자 를 사용 할 것 입 니 다.
모든 block 은 html 구문 블록 을 대표 합 니 다.이 블록 들 은 어디에서 정의 합 니까?현재 base.html 에서 정의 할 수도 있 고 다른 html 에서 정의 할 수도 있 습 니 다.어차피 정의 블록 이 없 으 면 효과 가 없 을 뿐 이라는 정의 가 있어 야 한다.
정의 할 때 home.html 상단 은 상속 관 계 를 설명해 야 합 니 다.(py 파일 이 home.html 로 연결 되 어 있 지만 home.html 는 base.html 템 플 릿 을 참조 하면 설명 합 니 다)

{% extends 'base.html' %}

블록 의 정의 형식,endblock 뒤의 블록 이름 은 생략 할 수 있 으 며,때로는 구 조 를 더욱 명확 하 게 할 수 있 습 니 다.

{% block    %}
     
{% endblock (  )%}

블록 을 정의 하면 base.html 에 대응 하 는 블록 은 이 블록 내용 으로 덮어 씁 니 다.
블록의 덮어 쓰기 상황
base.html 에서 block B 블록 내용 1 을 정의 하지만 home.html 에서 도 block B 블록 내용 2 를 정의 합 니 다.이 때 내용 2 를 우선 표시 합 니 다.내용 1 을 덮어 쓰기 때 문 입 니 다.
이해 해 보면 base.html 는 유 니 버 설 템 플 릿 입 니 다.우 리 는 직접 인용 할 수 있 습 니 다.문제 가 없 지만 블록 을 사용자 정의 하여 유 니 버 설 템 플 릿 의 내용 을 수정 하여 우리 가 원 하 는 효 과 를 얻 을 수 있 습 니 다.
또 하나의 경우,우 리 는 유 니 버 설 템 플 릿 의 내용 을 덮어 쓰 지 않 으 려 고 할 뿐만 아니 라,그 기초 위 에서 뭔 가 를 추가 하려 고 하 는 것 도 가능 하 다.
예 를 들 어 base.html 에서

<footer>
  {% block footer %}
  <p>Posted:Bikmin</p>
    <p>Contact with:<a href="[email protected]" rel="external nofollow" rel="external nofollow" >[email protected]</a> </p>
  {% endblock %}
</footer>

블록 을 사용자 정의 하지 않 으 면 base.html 유 니 버 설 템 플 릿 의 내용 을 사용 합 니 다.효 과 는 다음 과 같 습 니 다.

이 템 플 릿 은 괜 찮 은 것 같 습 니 다.덮어 쓰 고 싶 지 않 습 니 다.이 를 바탕 으로 뭔 가 를 추가 하고 싶 습 니 다.위 에 수평선 을 구분자 로 추가 하려 면 어떻게 해 야 합 니까?
방법 은 home.html 에서 블록 을 다시 정의 하지만super()함수 가 필요 합 니 다.

{% block footer %}
  <hr>
  {{ super() }}
{% endblock %}

{{ super() }} 유 니 버 설 템 플 릿 의 내용 을 나 타 냈 다.
한 항목 의 HTML 에서 블록 은 여러 번 정의 되 고 덮어 씁 니 다.
가끔 우 리 는 블록 의 내용 을 인용 하고 싶 고 긴 블록 내용 을 쓰 고 싶 지 않 습 니 다.이 럴 때 아래 의 문법 을 사용 할 수 있 습 니 다.어느 html 파일 에서 정의 하 든 상관 없습니다.계승 관계 만 있 으 면 됩 니 다.

{{ self.  () }}

7.포함 페이지
만약 에 HTML 코드 가 자주 사용 되 는 고정 적 인 것 이 있다 면 전체 HTML 문서 가 복잡 하고 내용 이 시 끄 러 워 보이 지 않도록 하기 위해 서 입 니 다.
이 부분의 코드 를 HTML 템 플 릿 으로 저장 하고 사용 할 때 사용 할 수 있 습 니 다.

{% include 'includes/_head.html' %}

포 함 된 방법 을 참조 하 십시오.따옴표 에는 경로 가 있 습 니 다.includes 는 templates 의 다음 폴 더 입 니 다.이것 은 어디 에 두 었 는 지 에 따라 경 로 를 채 웁 니 다.
8.매크로 매크로
이렇게 많이 배 웠 는데 Flask 에 템 플 릿 이 곳곳에 있 는 것 을 발 견 했 습 니 다.생각해 보 니 Python 의 함수 도 템 플 릿 같 지 않 습 니까?매개 변 수 를 입력 하면 특정한 기능 을 실현 할 수 있다.
그 러 니까 진 지 아 리 가 빠 질 수 없 지.
매크로 정의(예 를 들 어)
다음은의 함 수 를 정의 합 니 다.매크로 를 만 들 면 일부 매개 변 수 를 우리 가 원 하 는 기본 값 으로 수정 한 다음 에 호출 할 때 함수 처럼 호출 할 수 있 습 니 다.편리 합 니 다.

{#     #}
{% macro input(name,value='',type='text',size=20) %}
  <input type="{{ type }}"
    name="{{ name }}"
    value="{{ value }}"
    size="{{ size }}"/>
{% endmacro %}

매크로 호출

{{ input('username') }}
{{ input('password',type='password') }}

매크로 의 집합 은 라 이브 러 리 로 만든다.
매크로 는 함수 와 차이 가 많 지 않 습 니 다.Python 의 함 수 는 라 이브 러 리 에 봉인 할 수 있 습 니 다.그러면 많은 매크로 를 한데 모 을 수 있 습 니 다.(하나의 HTML 에서)사용 할 때 라 이브 러 리 함수 처럼 import 를 사용 할 수 있 습 니까?
답 은 당연 하지.이 방법 은 또 하나의 장점 이 있 는데,바로 우리 의 주 HTML 파일 을 더욱 간결 하 게 하 는 것 이다.공간 을 절약 하면 가 독성 이 더욱 강하 다.
다음은 예 를 들 어 macro 를''에 놓 겠 습 니 다.macro.html'중
그리고 어떻게 저희 파일 에 들 어 올 까요?

{% import '_macro.html' as ui %}

여기 서 주의해 야 합 니 다.as 라 이브 러 리 이름 을 추가 해 야 합 니 다.그렇지 않 으 면 우리 가 함 수 를 인용 할 때 어디서 함수 가 나 왔 는 지 모 릅 니 다.
호출 방식 도 약간 바 뀌 었 습 니 다.다음 과 같 습 니 다.

{{ ui.input('username') }}
{{ ui.input('password',type='password') }}

Python 의 사용 함수 와 똑 같 지 않 습 니까?
작은 프로젝트 실전
#Sample.py

# coding:utf-8
from flask import Flask,render_template,request,url_for
app = Flask(__name__)
@app.route('/')
def home():
  return render_template('home.html',title_name = 'welcome')
@app.route('/service')
def service():
  return 'service'
@app.route('/about')
def about():
  return 'about'
@app.template_test('current_link')
def is_current_link(link):
  return link == request.path
if __name__ == '__main__':
  app.run(debug=True)

#home.html

{% extends 'base.html' %}
{% import '_macro.html' as ui %}
{% block title %}{{ title_name }}{% endblock %}
{% block content %}
{% set links = [
  ('home',url_for('.home')),
  ('service',url_for('.service')),
  ('about',url_for('.about')),
] %}
<nav>
  {% for label,link in links %}
    {% if not loop.first %}|{% endif %}
    <a href="{% if link is current_link %}#
    {% else %}
    {{ link }}
    {% endif %}
    ">{{ label }}</a>
  {% endfor %}
</nav>
  <p>{{ self.title() }}</p>
  {{ ui.input('username') }}
  {{ ui.input('password',type='password') }}
{% endblock content %}
{% block footer %}
  <hr>
  {{ super() }}
{% endblock %}

#base.html

<!DOCTYPE html>
<html lang="en">
<head>
  {% block head %}
    {% include 'includes/_head.html' %}
  {% endblock %}
</head>
<body>
  <header>{% block header %}{% endblock %}</header>
  <div>{% block content %}<p>hello</p>{% endblock %}</div>
  {% for item in items %}
    <li>{% block loop_item scoped %}{{ item }}{% endblock %}</li>
  {% endfor %}
  <footer>
    {% block footer %}
    <p>Posted:Bikmin</p>
      <p>Contact with:<a href="[email protected]" rel="external nofollow" rel="external nofollow" >[email protected]</a> </p>
    {% endblock %}
  </footer>
</body>
</html>

#_head.html

<meta charset="UTF-8">
<link href="{{ url_for('static',filename='site.css') }}" rel="external nofollow" rel="stylesheet">
<title>{% block title %}{% endblock %}</title>

#macro

{#     #}
{% macro input(name,value='',type='text',size=20) %}
  <input type="{{ type }}"
    name="{{ name }}"
    value="{{ value }}"
    size="{{ size }}"/>
{% endmacro %}

실행 항목

더 많은 파 이 썬 관련 내용 은 본 사이트 의 주 제 를 볼 수 있 습 니 다.Python 입문 및 진급 고전 튜 토리 얼,Python 데이터 구조 및 알고리즘 튜 토리 얼,Python 함수 사용 기법 총화,Python 문자열 조작 기법 집합Python 파일 과 디 렉 터 리 작업 기법 을 모 았 습 니 다.
본 논문 에서 말 한 것 이 여러분 의 Python 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기