EJS에서 변수를 HTML로 렌더링


98

Node.js ( Forms ) 용 Forms 라이브러리를 사용하고 있는데, 이는 백엔드에서 나를 위해 양식을 다음과 같이 렌더링합니다.

var signup_form = forms.create({
    username: fields.string({required: true})
    , password: fields.password({required: true})
    , confirm:  fields.password({
        required: true
        , validators: [validators.matchField('password')]
    })
    , email: fields.email()
});
var signup_form_as_html = signup_form.toHTML();

마지막 줄 var signup_var signup_form_as_html = signup_form.toHTML();은 다음과 같은 HTML 블록을 만듭니다.

<div class="field required"><label for="id_username">Username</label><input type="text" name="username" id="id_username" /></div><div class="field required"><label for="id_password">Password</label><input type="password" name="password" id="id_password" /></div><div class="field required"><label for="id_confirm">Confirm</label><input type="password" name="confirm" id="id_confirm" /></div><div class="field"><label for="id_email">Email</label><input type="text" name="email" id="id_email" /></div>

기본적으로 긴 HTML 문자열입니다. 그런 다음 다음 코드를 사용하여 EJS 및 Express를 사용하여 렌더링하려고합니다.

res.render('signup.ejs', {
    session: loginStatus(req)
    , form: signup_form_as_html
});

그러나 HTML을 렌더링 할 때 실제 HTML (따라서 원하는 양식)이 아니라 위에 게시 한 문자열입니다. EJS를 사용하여 해당 문자열을 실제 HTML로 렌더링하는 방법이 있습니까? 아니면 Jade와 같은 것을 사용해야합니까?

답변:


296

EJS를 사용하면 여러 태그를 가질 수 있습니다.

    <% code %>

... 평가되지만 인쇄되지 않는 코드입니다.

    <%= code %>

... 평가되고 인쇄되는 (이스케이프 된) 코드입니다.

    <%- code %>

... 평가되고 인쇄되는 코드입니다 (이스케이프되지 않음).

변수를 인쇄하고 이스케이프하지 않기를 원하기 때문에 코드는 마지막 유형 ( <%-)이됩니다. 귀하의 경우 :

    <%- my_form_content %>

더 많은 태그는 전체 EJS 문서를 참조하십시오.


8
소품 친구 브라보 바로 내 문제를 해결하는
cbsm1th

이 게시물을 찾을 때까지 방법을 알아내는 데 몇 시간을 보냈습니다. 정말 고마워 !!!
Sam

좋아, 당신은 내 하루를 구했습니다.
Afshin Mehrabani 2014

여기에서 요청한 정확한 모듈을 사용하고있었습니다. 그래서 꽤 운이 :) 감사합니다
majidarif

무엇도 "(반전 쉼표) 문자를 이스케이프에 사용할 수 있습니까?
빅터

16

2017 년 10 월 업데이트

새로운 EJS은 (v2에서, v2.5.7) 개발이 여기에 무슨 일이 일어나고 : https://github.com/mde/ejs 이전 EJS (v0.5.x는 0.8.5는 v1.0.0 개발자)는 여기에서 확인할 수 있습니다 은 https : / /github.com/tj/ejs

이제 ejs로 더 많은 것을 할 수 있습니다. 당신이 사용할 수있는:

  • 이스케이프 출력 <%= %>(이스케이프 기능 구성 가능)
  • 이스케이프되지 않은 원시 출력 <%- %>
  • -%>끝 태그가있는 줄 바꿈 자르기 모드 ( '줄 바꿈 슬러 핑')
  • 제어 흐름을위한 공백 자르기 모드 (모두 공백 제거) <%_ _%>
  • 제어 흐름 <% %>

따라서 귀하의 경우에는 다음과 같은 <%- variable %>variable이 될 것입니다.

var variable = "text here <br> and some more text here";

누군가에게 도움이되기를 바랍니다. 🙂


3

내 데이터베이스에 html로 저장된 wysiwyg 편집기에서 텍스트 영역 입력을 렌더링하는 것과 동일한 문제가 발생했습니다. 브라우저는 그것을 렌더링하지 않지만 html을 텍스트로 표시합니다. 몇 시간의 검색 끝에

<%= data %> 이스케이프 데이터 동안

<%- data %>데이터는 '원시'(이스케이프 처리되지 않음)가 남았고 이제 브라우저가이를 렌더링 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.