Flask 프레임 워 크 Jinjia 템 플 릿 상용 문법 총화
9991 단어 Flask 프레임 워 크진 지 아 템 플 릿
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_link
HTML 에서 테스트 함수 이름 을 사용 할 수 있 습 니 다.(선택 가능)
@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 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Flask 프레임 통과 Flasklogin 사용자 로그 인 기능 예시 구현본 고의 실례 는 Flask 프레임 워 크 가 Flask 를 통 해login 은 사용자 로그 인 기능 을 실현 합 니 다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다. Fl...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.