koa2-swig 사용 설명서
Swig 사용 설명서
어떻게 사용합니까
API
swig.init({
allowErrors: false,
autoescape: true,
cache: true,
encoding: 'utf8',
filters: {},
root: '/',
tags: {},
extensions: {},
tzOffset: 0
});
options:
allowErrors: 기본값은 false입니다.모든 템플릿 확인 및 컴파일 오류를 템플릿으로 직접 내보냅니다.true인 경우 오류가 발생하여 Node로 내보냅니다.js 프로세스에서 응용 프로그램을 붕괴시킬 수 있습니다.
autoescape: 기본true, 유지를 강력히 권장합니다.문자 변환 테이블은 이스케이프 필터를 참조하십시오.
true: HTML 보안 전의false: 전의필터나 전의탭'js': js 보안 전의를 사용하지 않는 한
cache:false로 변경하면 요청한 템플릿의 파일을 다시 컴파일합니다.공식 환경은true를 유지하는 것을 권장합니다.
인코딩 템플릿 파일 인코딩
root는 템플릿의 디렉터리를 검색해야 합니다.템플릿이 swig에 전달되면.compileFile 절대 경로 (/로 시작), Swig는 템플릿 루트에서 검색되지 않습니다.그룹을 전달하면 첫 번째 일치하는 그룹 항목을 사용합니다.
tzOffset 기본 시간대 오프셋을 설정합니다.이 설정을 사용하면 변환 날짜 필터가 해당 시간대 오프셋을 자동으로 수정합니다.
필터 사용자 정의 필터나 기본 필터를 다시 쓰십시오. 사용자 정의 필터 안내서를 참고하십시오.
tags 사용자 정의 라벨이나 기본 라벨을 다시 쓰십시오. 사용자 정의 라벨 안내서를 참고하십시오.
extensions는 제3자 라이브러리를 추가합니다. 템플릿을 컴파일할 때 사용할 수 있습니다. 사용자 정의 탭 안내서를 참고하십시오.
nodejs
var tpl = swig.compileFile("path/to/template/file.html");
var renderedHtml = tpl.render({ vars: 'to be inserted in template' });
or var tpl = swig.compile("Template string here");
var renderedHtml = tpl({ vars: 'to be inserted in template' });
Express 결합
npm install express
npm install consolidate
그리고app.engine('.html', cons.swig);
app.set('view engine', 'html');
브라우저
Swig 브라우저 버전의 api는 기본적으로 nodejs 버전과 같고 차이점은 다음과 같습니다.
swig.init({
allowErrors: false,
autoescape: true,
cache: true,
encoding: 'utf8',
filters: {},
root: '/',
tags: {},
extensions: {},
tzOffset: 0
});
var tpl = swig.compileFile("path/to/template/file.html");
var renderedHtml = tpl.render({ vars: 'to be inserted in template' });
var tpl = swig.compile("Template string here");
var renderedHtml = tpl({ vars: 'to be inserted in template' });
npm install express
npm install consolidate
app.engine('.html', cons.swig);
app.set('view engine', 'html');
var template = swig.compile('{% block content %}{% endblock %}
', { filename: 'main' });
var mypage = swig.compile('{% extends "main" %}{% block content %}Oh hey there!{% endblock %}', { filename: 'mypage' });
기초
변수
{{ foo.bar }}
{{ foo['bar'] }}
변수가 정의되지 않으면 빈 문자를 출력합니다.
변수는 필터를 통해 수정할 수 있습니다.
{{ name|title }} was born on {{ birthday|date('F jS, Y') }}
// Jane was born on July 6th, 1985
논리 레이블
레이블 섹션을 참조하십시오.
메모
공백
템플릿의 공백은 최종 출력 시 기본적으로 유지됩니다. 공백을 제거해야 할 경우 논리 탭 앞뒤에 공백 제어복을 추가할 수 있습니다 -
{% for item in seq -%}
{{ item }}
{%- endfor %}
템플릿 상속
Swig는 extends와 block을 사용하여 템플릿 계승을 실현합니다
layout.html
{% block title %}My Site{% endblock %}
{% block head %}
{% endblock %}
{% block content %}{% endblock %}
index.html
{% extends 'layout.html' %}
{% block title %}My Page{% endblock %}
{% block head %}
{% parent %}
{% endblock %}
{% block content %}
This is just an awesome page.
{% endblock %}
변수 필터
변수를 수정하는 데 사용됩니다.변수 이름 뒤에 | 문자로 구분하여 필터를 추가합니다.여러 필터를 추가할 수 있습니다.
예제
{{ name|title }} was born on {{ birthday|date('F jS, Y') }}
and has {{ bikes|length|default("zero") }} bikes.
블록 내용에 필터를 추가하기 위해 필터 탭을 사용할 수도 있습니다
{% filter upper %}oh hi, paul{% endfilter %}
내장 필터
dd(value)는 변수와value를 추가하여 수치 문자열로 변환하면 자동으로 수치로 변환됩니다.
addslashes용\이스케이프 문자열
capitalize 대문자
date(format[, tzOffset]) 날짜를 지정한 형식으로 변환
형식: 형식 tzOffset: 시간대
default (value) 기본값 (변수가undefined,null,false인 경우)
e와 escape
escape([type]) 이스케이프 문자
기본값: &, ","js: &,, =, -,;
first 그룹 첫 번째 값 반환
join(glue)과 [].join
json_encode([indent])는 JSON과 유사합니다.stringify, indent는 들여쓰기 공백 수
last 마지막 값 반환
length 변수의 length를 되돌려줍니다.object라면 키의 수량을 되돌려줍니다
lower 동".toLowerCase()
raw 지정한 입력은 의미가 바뀌지 않습니다.
replace(search,replace[,flags])는'.replace
reverse 뒤집기 그룹
striptags html/xml 탭 제거
제목 대문자
유닛 리셋
upper 동".toUpperCase
url_encode와 encodeURIComponent
url_decode와 decodeURIComponemt
사용자 정의 필터
myfilter를 만듭니다.js 그리고 Swig의 초기화 함수에 도입
swig.init({ filters: require('myfilters') });
myfilter에서js에서 모든 filter 방법은 간단한 js 방법이고 다음 예는 문자열을 뒤집는 filter입니다.
exports.myfilter = function (input) {
return input.toString().split('').reverse().join('');
};
Filter가 도입되면 다음과 같이 사용할 수 있습니다.
{{ name|myfilter }}
{% filter myfilter %}I shall be filtered{% endfilter %}
너도 아래와 같이 filter에 매개 변수를 전달할 수 있다.
exports.prefix = function(input, prefix) {
return prefix.toString() + input.toString();
};
{{ name|prefix('my prefix') }}
{% filter prefix 'my prefix' %}I will be prefixed with "my prefix".{% endfilter %}
{% filter prefix foo %}I will be prefixed with the value stored to `foo`.{% endfilter %}
태그
내장 레이블
extends 현재 템플릿을 부모 템플릿으로 계승합니다. 파일의 맨 앞에 있어야 합니다.
매개 변수:file:부모 템플릿 상대 템플릿root의 상대 경로
블록은 상속된 템플릿을 다시 쓰거나 부모 템플릿의 동명 블록을 다시 쓸 수 있도록 블록을 정의합니다
매개 변수:name: 블록의 이름, 알파벳 밑줄로 시작해야 합니다
parent 현재 블록에 부모 템플릿의 같은 이름의 블록을 주입합니다.
현재 위치로 템플릿을 포함합니다. 이 템플릿은 현재 상하문을 사용합니다.
매개 변수: file: 템플릿 상대 템플릿 루트를 포함하는 상대 경로 ignore missing: 템플릿이 존재하지 않아도 오류가 발생하지 않습니다 with x: 템플릿에 전달할 루트 상하문 대상을 설정합니다.only: 템플릿 상하문에서 with x로 정의된 매개 변수를 제한하는 키 값이어야 합니다.
{% include template_path %}
{% include "path/to/template.js" %}
템플릿이 존재하지 않으면 오류가 발생하지 않도록 ignoremissing을 표시할 수 있습니다
{% include "foobar.html" ignore missing %}
기본적으로 포함된 템플릿에는 전달되지 않는 로컬 선언의 컨텍스트 변수입니다.예를 들어 다음과 같은 경우, inc.html는foo와bar를 얻을 수 없습니다
{% set foo = "bar" %}
{% include "inc.html" %}
{% for bar in thing %}
{% include "inc.html" %}
{% endfor %}
로컬 성명된 변수를 포함하는 템플릿 종류에 도입하려면 with 파라미터를 사용하여 뒤에 있는 대상을 포함하는 상하문에 만들 수 있습니다
{% set foo = { bar: "baz" } %}
{% include "inc.html" with foo %}
{% for bar in thing %}
{% include "inc.html" with bar %}
{% endfor %}
현재 상하문에서foo와bar를 사용할 수 있다면, 아래의 경우foo만 inc.html로 정의됩니다
{% include "inc.html" with foo only %}
only는 마지막 매개 변수로 다른 위치에 두면 무시됩니다.
raw는 태그의 모든 내용을 분석하지 않습니다. 모든 내용을 출력합니다.
매개 변수:file:부모 템플릿 상대 템플릿root의 상대 경로
객체 및 배열 반복
매개 변수: x: 현재 순환 교체 이름 in: 문법 표기 y: 교체 가능 대상.필터를 사용하여 수정할 수 있습니다.
{% for x in y %}
{% if loop.first %}{% endif %}
- {{ loop.index }} - {{ loop.key }}: {{ x }}
{% if loop.last %}
{% endif %}
{% endfor %}
특수 순환 변수loop.index: 현재 순환하는 인덱스 (1 시작) loop.index0: 현재 순환하는 인덱스 (0부터) loop.revindex: 현재 순환이 끝에서 시작하는 인덱스 (1부터) loop.revindex0: 현재 순환이 끝에서 시작하는 인덱스 (0부터) loop.키: 만약 교체가 대상이라면 현재 순환하는 키입니다. 그렇지 않으면 loop과 같습니다.index loop.first: 첫 번째 값이true loop으로 되돌아옵니다.last: 마지막 값이true loop으로 되돌아옵니다.cycle: 지정된 매개 변수를 주기로 하는 도움말 함수
{% for item in items %}
{{ item }}
{% endfor %}
for 탭에서else 사용하기
{% for person in people %}
{{ person }}
{% else %}
There are no people yet!
{% endfor %}
if 조건문
매개변수:...:유효한 JavaScript 조건문 및 기타 인간이 읽을 수 있는 문법 적용
{% if x %}{% endif %}
{% if !x %}{% endif %}
{% if not x %}{% endif %}
{% if x and y %}{% endif %}
{% if x && y %}{% endif %}
{% if x or y %}{% endif %}
{% if x || y %}{% endif %}
{% if x || (y && z) %}{% endif %}
{% if x [operator] y %}
Operators: ==, !=, , >=, ===, !==
{% endif %}
{% if x == 'five' %}
The operands can be also be string or number literals
{% endif %}
{% if x|length === 3 %}
You can use filters on any operand in the statement.
{% endif %}
{% if x in y %}
If x is a value that is present in y, this will return true.
{% endif %}
else와 else if
{% if foo %}
Some content.
{% else if "foo" in bar %}
Content if the array `bar` has "foo" in it.
{% else %}
Fallback content.
{% endif %}
autoescape 현재 변수의 자동 의미 변환 행위 변경
매개 변수:on: 현재 내용의 의미 전환 여부 type: 의미 형식, js 또는 html, 기본 html
가설
some_html_output = 'Hello "you" & \'them\'
';
그리고
{% autoescape false %}
{{ some_html_output }}
{% endautoescape %}
{% autoescape true %}
{{ some_html_output }}
{% endautoescape %}
{% autoescape true "js" %}
{{ some_html_output }}
{% endautoescape %}
내보내기
Hello "you" & 'them'
<p>Hello "you" & 'them' </p>
\u003Cp\u003EHello \u0022you\u0022 & \u0027them\u0027\u003C\u005Cp\u003E
set 현재 상하문에서 다시 사용할 변수 설정
매개 변수:name:변수 이름=:문법 표기value:변수 값
{% set foo = [0, 1, 2, 3, 4, 5] %}
{% for num in foo %}
{{ num }}
{% endfor %}
macro 사용자 정의 복용 가능한 코드 세그먼트 만들기
매개변수:...:사용자 정의
{% macro input type name id label value error %}
{% endmacro %}
그리고 아래처럼 사용하세요.
{{ input("text", "fname", "fname", "First Name", fname.value, fname.errors) }}
{{ input("text", "lname", "lname", "Last Name", lname.value, lname.errors) }}
출력은 다음과 같습니다.
import는 다른 템플릿의 매크로를 현재 상하문에 도입할 수 있습니다
매개 변수: file: 템플릿 상대 템플릿 루트의 상대 경로 도입 as: 문법 표기 var: 매크로에 할당된 접근 가능한 상하문 대상
{% import 'formmacros.html' as form %}
{# this will run the input macro #}
{{ form.input("text", "name") }}
{# this, however, will NOT output anything because the macro is scoped to the "form" object: #}
{{ input("text", "name") }}
필터 전체 블록에 필터 적용
매개변수: filter_name: 필터 이름...:필터에 전달된 매개 변수 부모 템플릿 상대 템플릿 루트의 상대 경로
{% filter uppercase %}oh hi, {{ name }}{% endfilter %}
{% filter replace "." "!" "g" %}Hi. My name is Paul.{% endfilter %}
출력
OH HI, PAUL
Hi! My name is Paul!
spaceless html 탭 사이의 빈칸 제거 시도
{% spaceless %}
{% for num in foo %}
{{ loop.index }}
{% endfor %}
{% endspaceless %}
출력
1 2 3
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.