템플릿 엔진 및 양식 플러그인(파이썬) 사용에 대한 자세한 예를 가르쳐주세요.

Y2J
풀어 주다: 2017-04-26 10:12:36
원래의
1824명이 탐색했습니다.

첫 번째 장의 내용이 끝나면 이미 몇 가지 간단한 페이지를 만들 수 있습니다. 먼저 이 방법을 사용하여 로그인 페이지를 만듭니다. 먼저 로그인 라우팅 방법을 만듭니다.

@app.route("/login",methods=["GET"])
def login():
 html="<form method=&#39;post&#39;>" \
 "<table>" \
 "<tr><td>请输入用户名</td><td><input type=&#39;text&#39; name=&#39;username&#39;/></td></tr>" \
 "<tr><td>请输入密码</td><td><input type=&#39;password&#39; name=&#39;password&#39;/></td></tr>" \
 "<tr><td><input type=&#39;submit&#39; value=&#39;登录&#39;/></td></tr>" \
 "</table>" \
 "</post>"
 return html
로그인 후 복사

이후 페이지가 반환되면 다음 결과가 포함된 간단한 로그인 페이지가 있습니다.

그런 다음 로그인 게시물 반환 페이지가 있습니다.

@app.route("/login",methods=["POST"])
def loginPost():
 username=request.form.get("username","")
 password=request.form.get("password","")
 if username=="test" and password=="123" :
 return "登录成功"
 else:
 return "登录失败"
로그인 후 복사

테스트를 입력한 후 123 , 로그인 성공 표시

기능적으로는 확실히 구현되어 있지만 다른 측면에서 보면 실제로 적용할 수 있는 프로그램이라고 말하기는 어렵습니다. js 스크립트는 고려되지 않으며 CSS 스타일 시트는 인증 코드 상자 추가와 같은 간단한 유지 관리 측면에서 이것이 즐거운 작업이라고 생각하는 사람은 없을 것 같습니다.

그래서 우선 페이지의 html 부분을 분리해야 합니다. 이를 위해 플라스크는 이를 달성하기 위해 jinja2 템플릿 엔진을 제공합니다.

jinja2 템플릿 엔진은 또한 플라스크의 가장 기본적인 규칙을 준수합니다. 즉, 많은 구성에 기본 기본값이 있습니다. jinja2와 비교할 때 가장 중요한 기본값이 하나 있습니다. 파일은 템플릿 폴더에 있습니다. 이 폴더는 사용자 정의할 수 있지만 지금은 기본값을 사용하는 것으로 충분합니다.

먼저 PyCharm 프로젝트 루트 디렉토리에 template 폴더를 생성한 후, 그 폴더에 login.html 파일을 생성합니다. 물론 디렉토리 구조는 다음과 같습니다.

login.html에 다음과 같이 코드를 입력하세요.

<!DOCTYPE html>
<html>
 <head>
 <title>欢迎您登陆--牛博客</title>
 </head>
 <body>
 <form method=&#39;post&#39;>
 <table>
 <tr><td>请输入用户名</td><td><input type=&#39;text&#39; name=&#39;username&#39;/></td></tr>
 <tr><td>请输入密码</td><td><input type=&#39;password&#39; name=&#39;password&#39;/></td></tr>
 <tr><td><input type=&#39;submit&#39; value=&#39;登录&#39;/></td></tr>
 </table>
 </form>
 </body>
</html>
로그인 후 복사

코드는 매우 간단하고 실제로 스타일 측면에서 미화되지 않았습니다. , 지능적인 인식 때문에 템플릿을 사용한 다음 default.py의 로그인 방법을 수정하면 코드는 다음과 같습니다.

from flask import render_template #头部,引入模板渲染方法

@app.route("/login",methods=["GET"])
def login():
 return render_template("/login.html") 

 #渲染模板,默认找templates文件夹下的login.html文件
로그인 후 복사

html 템플릿의 코드는 다음과 동일합니다. py 파일에 직접 작성한 내용은 이때 페이지를 새로 고쳐서 효과를 표시합니다. 이전과 동일하지만 표시 효과는 크게 변하지 않았지만 이때 HTML의 특정 요소를 수정하면 훨씬 편리할 것입니다. .

jinja2 템플릿 엔진은 일부 지침에 인덱스를 사용하는 등 더욱 강력한 기능도 지원합니다.

기본 사용법

기본값 수정 .py의 코드 부분:

from flask import render_template #页头,导入渲染函数

@app.route("/")
def index():
 return render_template("index.html",site_name=&#39;myblog&#39;)
로그인 후 복사

index.html의 코드:

<!DOCTYPE html>
<html>
<head>
 <meta charset="UTF-8">
 <title>{{site_name}}</title>
</head>
<body>
<h1>这个站点的名字为 {{site_name}} </h1>
</body>
</html>
로그인 후 복사

flask의 render_template 함수는 여러 매개변수를 지원합니다. 여기서 함수의 첫 번째 매개변수는 템플릿 이름입니다. 그런 다음 템플릿의 변수에 대한 데이터를 제공하기 위해 모두 키-값 쌍인 여러 매개 변수를 제공할 수 있습니다. 이 예에서는 site_name에 myblog의 값이 제공되고, 템플릿에서 {{매개변수 이름}}이 변수를 나타내는 데 사용됩니다.

이때 브라우저 입력 주소 출력 결과는

입니다.
<!DOCTYPE html>
<html>
<head>
 <meta charset="UTF-8">
 <title>myblog</title>
</head>
<body>
<h1>这个站点的名字为 myblog </h1>
</body>
</html>
로그인 후 복사

jinja2 템플릿은 코드와 같은 몇 가지 변수 필터도 제공합니다.

<!DOCTYPE html>
<html>
<head>
 <meta charset="UTF-8">
 <title>{{site_name|upper}}</title>
</head>
<body>
<h1>这个站点的名字为 {{site_name}} </h1>
</body>
</html>
로그인 후 복사

출력은 다음과 같습니다.

<!DOCTYPE html>
<html>
<head>
 <meta charset="UTF-8">
 <title>MYBLOG</title>
</head>
<body>
<h1>这个站点的名字为 myblog </h1>
</body>
</html>
로그인 후 복사

일반적으로 사용되는 필터는 다음과 같습니다

탈출 없이 안전
capitalize 첫 글자를 대문자로 표시
lower 소문자로 변환
upper 대문자로 변환
trim 후행 공백 제거
striptages html 태그 제거

추가로 , Jinja2 변수 일부 복합 유형일 수도 있으며 다음과 같은 복합 유형의 일반적인 메소드를 사용할 수도 있습니다.

<!DOCTYPE html>
<html>
<head>
 <meta charset="UTF-8">
 <title>{{site_name[2:]}}</title> 
</head>
<body>
<h1>这个站点的名字为 {{site_name}} </h1>
</body>
</html>
로그인 후 복사

출력은 다음과 같습니다.

<!DOCTYPE html>
<html>
<head>
 <meta charset="UTF-8">
 <title>blog</title>
</head>
<body>
<h1>这个站点的名字为 myblog </h1>
</body>
</html>
로그인 후 복사

제어문

제어문은 템플릿의 기본 기능입니다. Jinja2도 해당 기능을 제공합니다.

//选择
{% if name==&#39;test&#39; %}
 这是测试
{% else %}
 {{name}},你好
{% endif %}

//循环
<ul>
 {% for blog in blogs%}
 {{ blog.title }}
 {% endfor%}
</ul>
로그인 후 복사

이러한 기본 사용법 외에도 템플릿은 재사용을 위한 매크로 기능도 제공합니다. 예를 들어, Macros.html 파일

{% macro render_title(blog)%}
 <li>{{blog.title}}</li>
{% endmacro%}
로그인 후 복사

에 다음 코드를 작성한 다음 이전 템플릿에

{% import &#39;macros.html&#39; as macros %}
<ul>
 {% for blog in blogs %}
 {{ macros.render_title(blog) }}
 {% endfor %}
</ul>
로그인 후 복사

실행 결과는 이전과 완전히 동일합니다

Jinja2는 또한 템플릿 상속이라는 더 강력한 기능을 제공합니다. 이것은 개인적으로 Java의 sitemesh 프레임워크와 약간 유사한 느낌을 줍니다. 먼저 base.html의 기본 템플릿을 만들어야 합니다. 여기서 블록 태그는 다음을 의미합니다. 하위 템플릿에서 사용할 수 있습니다. 특히 이 예에서는 수정 가능한 부분이 머리글, 제목, 본문입니다. 다음은 하위 템플릿 코드입니다.

<!DOCTYPE html>
<html>
<head>
 {% block head %}
 <meta charset="UTF-8">
 <title>{% block title%} {% endblock %} - 牛博客</title>
 <script src="http://cdn.bootcss.com/jquery/2.2.4/jquery.min.js"></script>
 {% endblock %}
</head>
<body>
 {% block body %}
 {% endblock %}
</body>
</html>
로그인 후 복사

현재 실행 결과는 여전히

{% extends "base.html" %}
{% block title %}{{site_name[2:]}}{% endblock %}
{% block head %}
 {{super()}}
{% endblock %}

{% block body %}
 <h1>这个站点的名字为 {{site_name}} </h1>
{% endblock %}
로그인 후 복사

이제 템플릿 엔진이 있으므로 어쨌든 매우 쉽게 수행할 수 있습니다. 페이지 수준에서는 몇 가지 좋은 기능이 있지만 현재 인터페이스가 그다지 아름답지 않다는 것은 분명합니다. 다음 장에서는 현재 주류 프런트 엔드 프레임워크 부트스트랩과 플라스크 프레임워크를 통합할 것입니다.

위 내용은 템플릿 엔진 및 양식 플러그인(파이썬) 사용에 대한 자세한 예를 가르쳐주세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿