jade(用于nodejs)模板中的子字符串

时间:2012-06-29 08:10:07

标签: node.js pug

有人请告诉我如何在jade中使用nodejs我可以将一个字符串截断为多个字符/单词,理想情况下是否意识到字符串中的HTML标记?

这应该类似于Django的truncatechars / truncatewords和truncatechars_html / truncatewords_html过滤器。

如果这在玉中不存在,哪种方式是正确的?我正在开始我的第一个nodejs + express + CouchDB应用程序,并且可以在nodejs代码中执行它,但似乎过滤器更合适。 如果我知道如何:),我还会考虑编写一个像这样的过滤器(和其他人)。

快速说明:

// in nodejs:
// body variable comes from CouchDB
res.render('home.jade', { title : "test", featuredNews : eval(body)});

// in home.jade template:
    ul.thumbnails
    each article in featuredNews.rows
        a(href="#"+article.slug)
            li.span4
                div.value.thumbnail
                    img(align='left',src='http://example.com/image.png')
                    p!= article.value.description:truncatewords_html(30)

所以我编写了truncatewords_html(30)来说明我认为它应该类似于什么。

欣赏任何想法!

谢谢, 伊戈尔

2 个答案:

答案 0 :(得分:2)

这是一个小“truncate_words”函数:

function truncate( value, arg ) {
    var value_arr = value.split( ' ' );
    if( arg < value_arr.length ) {
        value = value_arr.slice( 0, arg ).join( ' ' );
    }
    return value;
}

您可以在将字符串发送到模板之前使用它,或者使用辅助方法将模板发送到模板中。

答案 1 :(得分:0)

cheerio是一个很好的小库,可以完成jquery和jsdom的一个子集。然后很容易:

app.helpers({
    truncateWords_html : function(html, words){
       return cheerio(html).text().split(/\s/).slice(0, words).join(" ")
    }
})

然后,在玉石模板中使用:

#{truncateWords_html(article.value.description, 30)}

这看起来像添加任何过滤器的通用方法,欢呼! :))