Temple templates with vibe.d support and first D experiences

"István Zólyomi" via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Wed Mar 18 01:13:36 PDT 2015


Hi,

I've been lurking around in the forums for quite a long time now, 
but only recently tried D for a bit more than some trivial 
experimentation. Though the documentation of external libraries 
and the tooling itself is far from a commercial solution in 
quality, I understand that it's a community effort, so my 
experience is good in overall.

I really like what I've seen of vibe.d so far. The only strange 
part was Diet templates: though the concept is not bad at all, 
it's not practical. Unless you're also a good web designer, you 
usually start from existing HTML templates, using Diet templates 
would require a complete rewrite in such cases.

I've seen in some forums that the Temple template engine may be 
more practical in such cases and it has vibe.d support, so I gave 
it a try. I have the following function mapped to some URL:

void hello(HTTPServerRequest req, HTTPServerResponse res)
{
	    auto ctx = new TempleContext;
     ctx.username = "testing";

     // Gives compile error
     // renderTemple!("Hello <%= var.username %>")(res, ctx);

     // I'd expect this behaves the same, but works fine
     string content = compile_temple!("Hello <%= var.username 
%>").toString(ctx);
     res.writeBody(content);
}

In the code above, function renderTemplate() gives the following 
compile error which I could not solve so far:

Compiling using dmd...
Compiling Temple with Vibed support
TempleFunc-mixin-1(51): Error: static assert  "Filter does not 
have a case that accepts a VariantN!32LU"
TempleFunc-mixin-1(17):        instantiated from here: 
__temple_buff_filtered_put!(VariantN!32LU)
../../../.dub/packages/temple-0.7.3/src/temple/package.d:47: 
InlineTemplate(1):        instantiated from here: 
__temple_put_expr!(VariantN!32LU)
src/temple/temple.d(77):        instantiated from here: 
TempleFunc!(TempleHtmlFilter)
../../../.dub/packages/temple-0.7.3/src/temple/package.d(43):     
    ... (2 instantiations, -v to show) ...
../../../.dub/packages/temple-0.7.3/src/temple/vibe.d(53):        
instantiated from here: Temple!("Hello <%= var.username %>", 
TempleHtmlFilter)
source/app.d(...):        instantiated from here: 
renderTemple!("Hello <%= var.username %>", TempleContext)

I'm using dub to build and run the application. Am I doing 
something wrong here, or is it something environmental like a 
library version conflict or wrong D deployment?

thanks
István


More information about the Digitalmars-d-learn mailing list