# 9.6 Template

► |  | Pollen: the book is a program

1 | Installation
2 | Quick tour
3 | Backstory
4 | The big picture
5 | First tutorial
6 | Using raco pollen
7 | File formats
8 | ◊ command overview
9 | Module reference
10 | Acknowledgments
11 | License & source code
| Index

▼ | 9 | Module reference

9.1 | Cache
9.2 | Decode
9.3 | File
9.4 | Pagetree
9.5 | Render
9.6 | Template
9.7 | Tag
9.8 | Top
9.9 | World

On this page:

->html
select
select*
select-from-metas
select-from-doc

6.0.1
top ← prev up next →

#### 9.6`` Template

( require pollen/template ) | package: pollen

Convenience functions for templates. These are automatically imported into the eval environment when rendering with a template (see render).

This module also provides everything from sugar/coerce/value.

> > procedure

> > (->html |  | xexpr |  |  |  |
> > | [ | #:tag html-tag |  |  |  |
> > |  | #:attrs html-attrs |  |  |  |
> > |  | #:splice splice-html?]) |  | → |  | string?

> xexpr : xexpr?
> html-tag : ( or/c #f txexpr-tag? ) = #f
> html-attrs : ( or/c #f txexpr-attrs? ) = #f
> splice-html? : boolean? = #f

Convert xexpr to an HTML string. Similar to xexpr->string, but consistent with the HTML spec, text that appears within script or style blocks will not be escaped.

Examples:

> > ( define tx '(root (script "3 > 2") "Why is 3 > 2?"))

> > ( xexpr->string tx)
> "<root><script>3 &gt; 2</script>Why is 3 &gt; 2?</root>"
> > (->html tx)
> "<root><script>3 > 2</script>Why is 3 &gt; 2?</root>"

The optional keyword arguments html-tag and html-attrs let you set the outer tag and attributes for the generated HTML. If xexpr already has an outer tag or attributes, they will be replaced.

Examples:

> > ( define tx '(root ((id "huff")) "Bunk beds"))

> > (->html tx)
> "<root id=\"huff\">Bunk beds</root>"
> > (->html tx #:tag 'div)
> "<div id=\"huff\">Bunk beds</div>"
> > (->html tx #:attrs '((id "doback")))
> "<root id=\"doback\">Bunk beds</root>"
> > (->html tx #:tag 'div #:attrs '((id "doback")))
> "<div id=\"doback\">Bunk beds</div>"

Whereas if xexpr has no tag or attributes, they will be added. If you supply attributes without a tag, you’ll get an error.

Examples:

> > ( define x "Drum kit")

> > (->html x)
> "Drum kit"
> > (->html x #:tag 'div)
> "<div>Drum kit</div>"
> > (->html x #:tag 'div #:attrs '((id "doback")))
> "<div id=\"doback\">Drum kit</div>"
> > (->html x #:attrs '((id "doback")))
> ->html: can't use attribute list '((id doback)) without a
> #:tag argument

If the generated HTML has an outer tag, the splice-html? option will strip it off. Otherwise this option has no effect.

Examples:

> > ( define tx '(root (p "Chicken nuggets")))

> > (->html tx)
> "<root><p>Chicken nuggets</p></root>"
> > (->html tx #:splice #t)
> "<p>Chicken nuggets</p>"
> > ( define x "Fancy sauce")

> > (->html x)
> "Fancy sauce"
> ; This next one won't do anything
> > (->html x #:splice #t)
> "Fancy sauce"
> ; Adds the outer tag, but then #:splice removes it
> > (->html x #:tag 'div #:attrs '((id "doback")) #:splice #t)
> "Fancy sauce"

Be careful not to pass existing HTML strings into this function, because the angle brackets will be escaped. Fine if that’s what you want, but you probably don’t.

Examples:

> > ( define tx '(p "You did" (em "what?")))

> > (->html tx)
> "<p>You did<em>what?</em></p>"
> > (->html (->html tx))
> "&lt;p&gt;You did&lt;em&gt;what?&lt;/em&gt;&lt;/p&gt;"

> > procedure

> > (select key value-source) → ( or/c #f txexpr-element? )

> key : symbolish?
> value-source : ( or/c hash? txexpr? pagenode? pathish? )

> > procedure

> > (select* key value-source) → ( or/c #f ( listof txexpr-element? ))

> key : symbolish?
> value-source : ( or/c hash? txexpr? pagenode? pathish? )

Find matches for key in value-source, first by looking in its metas (using select-from-metas) and then by looking in its doc (using select-from-doc). With select, you get the first result; with select*, you get them all. In both cases, you get #f if there are no matches.

> > procedure

> > (select-from-metas key meta-source) → ( or/c #f txexpr-element? )

> key : symbolish?
> meta-source : ( or/c hash? pagenodeish? pathish? )

Look up the value of key in meta-source. The meta-source argument can be either a set of metas (i.e., a hash) or a pagenode?, from which metas are pulled. If no value exists for key, you get #f.

Examples:

> > ( module ice-cream pollen/markup
> '(div (question "Flavor?")
> (answer "Chocolate chip") (answer "Maple walnut"))
> '(meta ((template "sub.xml.pt")))
> '(meta ((target "print"))))

> ; Import doc & metas from 'ice-cream submodule
> > ( require 'ice-cream)

> > (select-from-metas 'template metas)
> "sub.xml.pt"
> > ('target . select-from-metas . metas)
> "print"
> > (select-from-metas 'nonexistent-key metas)
> #f

> > procedure

> > (select-from-doc key doc-source) → ( or/c #f txexpr-element? )

> key : symbolish?
> doc-source : ( or/c txexpr? pagenodeish? pathish? )

Look up the value of key in doc-source. The doc-source argument can be either be a doc (i.e., a txexpr) or a pagenode?, from which doc is pulled. If no value exists for key, you get #f.

Examples:

> > ( module gelato pollen/markup
> '(div (question "Flavor?")
> (answer "Nocciola") (answer "Pistachio"))
> '(meta ((template "sub.xml.pt")))
> '(meta ((target "print"))))

> ; Import doc & metas from 'gelato submodule
> > ( require 'gelato)

> > (select-from-doc 'question doc)
> '("Flavor?")
> > ('answer . select-from-doc . doc)
> '("Nocciola" "Pistachio")
> > (select-from-doc 'nonexistent-key doc)
> #f

top ← prev up next →