My error I think - I was assuming that loadTemplates loads template directories recursively like StringTemplate, but in fact it appears that it only loads templates in the given directory, correct?
Kevin --- On Tue, 6/22/10, Kevin Jardine <[email protected]> wrote: > From: Kevin Jardine <[email protected]> > Subject: Re: [Snap Framework] renderTemplate with XML fragments in Heist > To: [email protected] > Date: Tuesday, June 22, 2010, 11:08 PM > Me again - still banging my head > against the wall. > > I've loaded my templates, and passed my master splice > function bound to the tag "view" to renderTemplate. > > This loads my page shell as expected and tried to render > the content. > My main splice function is calling another function here: > > templateSplice :: String -> > [(B.ByteString,B.ByteString)] -> Splice MyMonad > > > templateSplice s p = do > c <- callTemplate (B.pack s) p > case (c) of > Just v -> return v > Nothing -> return [Text > (B.pack > ("oops in > templateSplice while attempting to render: " > ++ (show s) ++ " > with parameters: " ++ (show p) ++ "\n")), Element (B.pack > "br") [] []] > > and unfortunately templateSplice always returns nothing > (that is, the error message) even though I loaded all of the > relevant templates at the first step. > > Do you see what I am doing wrong? > > Kevin > > --- On Thu, 6/17/10, MightyByte <[email protected]> > wrote: > > > From: MightyByte <[email protected]> > > Subject: Re: [Snap Framework] renderTemplate with XML > fragments in Heist > > To: "Kevin Jardine" <[email protected]> > > Cc: [email protected] > > Date: Thursday, June 17, 2010, 6:36 PM > > Yes, that's correct. Just keep > > in mind that one of our main goals is > > to promote the clean separation between view and > business > > logic. > > Heist was intentionally designed to discourage > putting > > business logic > > in the templates (views). This is why we didn't > make > > any kind of loop > > or conditional syntax available in the templates. > > Similarly we want > > to discourage putting views inside your Haskell > code. > > So while it > > might be easy to make a splice like this: > > > > myArticle post = do > > let body = [Element "span" [("class", "author")] > > [Text (getAuthor post)] > > > > ,Element "div" [("class", "postbody")] (getBody > > post) > > > > ] > > return [Element "h1" [] [Text (getTitle post)] > > ,Element > > "div" [("class", "post")] body > > ] > > > > ...we discourage this pattern of putting view details > in > > your code. > > The preferred approach would be to implement this bit > of > > HTML as > > another template that gets each of the individual > pieces of > > data from > > bound splices. > > > > On Thu, Jun 17, 2010 at 12:13 PM, Kevin Jardine <[email protected]> > > wrote: > > > OK, thanks for the encouragement. > > > > > > I was looking at the definition of bindStrings > itself > > and it occurs to me that a trivial variant would be: > > > > > > bindNodes pairs ts = foldr add ts pairs > > > where > > > add (n,v) = bindSplice n (return v) > > > > > > So perhaps I'll start with that and see where it > takes > > me. > > > > > > That means that I would be rewriting my view > system to > > process lists of nodes rather than strings, but the > same > > flow structure would remain (at least for now). > > > > > > Kevin > > > > > > --- On Thu, 6/17/10, MightyByte <[email protected]> > > wrote: > > > > > >> From: MightyByte <[email protected]> > > >> Subject: Re: [Snap Framework] renderTemplate > with > > XML fragments in Heist > > >> To: "Kevin Jardine" <[email protected]> > > >> Date: Thursday, June 17, 2010, 6:05 PM > > >> Yes, that is exactly the approach we > > >> had in mind. You could even > > >> eliminate nodeDict as a parameter and store > it as > > state in > > >> MyMonad. > > >> But you wouldn't have to do that. You can > > organize it > > >> in whatever way > > >> works best for your application. > > >> > > >> On Thu, Jun 17, 2010 at 12:00 PM, Kevin > Jardine > > <[email protected]> > > >> wrote: > > >> > One experiment that I'm looking at is > > defining: > > >> > > > >> > klugeSplice :: [(B.ByteString,[Node])] > -> > > Splice > > >> MyMonad > > >> > klugeSplice nodeDict = do > > >> > input <- getParamNode > > >> > let name = getName input > > >> > return $ fromMaybe [Text (B.pack > > "oops")] $ > > >> lookup name nodeDict > > >> > > > >> > and passing > > >> > > > >> > (klugeSplice nodeDict) as the first > parameter > > to > > >> bindSplice. > > >> > > > >> > At least that function compiles but I'm > > afraid that > > >> I'm still lost in a conceptual sea so I'm not > sure > > if this > > >> is anything like the best approach. > > >> > > > >> > Kevin > > >> > > > >> > --- On Thu, 6/17/10, Kevin Jardine > <[email protected]> > > >> wrote: > > >> > > > >> >> From: Kevin Jardine <[email protected]> > > >> >> Subject: Re: [Snap Framework] > > renderTemplate with > > >> XML fragments in Heist > > >> >> To: [email protected] > > >> >> Date: Thursday, June 17, 2010, 5:05 > PM > > >> >> To explain in more detail, I had > > >> >> thought that Heist was a "slave" > > template > > >> library. > > >> >> > > >> >> You hand it some attributes (nodes > or > > strings) and > > >> a > > >> >> template name and it hands you back > > something > > >> (nodes or a > > >> >> rendered string). > > >> >> > > >> >> Currently, however, it seems as > though > > Heist is > > >> the master > > >> >> app and mine ends up being the slave > - > > you hand > > >> Heist a page > > >> >> shell and define some hooks and it > does > > all the > > >> work and > > >> >> hands you the final string. > > >> >> > > >> >> Is that correct? > > >> >> > > >> >> If so, I'm still keen to use the > library > > but will > > >> have to > > >> >> rethink how I am doing things as the > work > > flow is > > >> in essence > > >> >> in the reverse order of what I am > used > > to. > > >> >> > > >> >> Kevin > > >> >> > > >> >> --- On Thu, 6/17/10, Kevin Jardine > <[email protected]> > > >> >> wrote: > > >> >> > > >> >> > From: Kevin Jardine <[email protected]> > > >> >> > Subject: Re: [Snap Framework] > > renderTemplate > > >> with XML > > >> >> fragments in Heist > > >> >> > To: "MightyByte" <[email protected]> > > >> >> > Date: Thursday, June 17, 2010, > 4:34 > > PM > > >> >> > Thanks for your patience here! > > >> >> > > > >> >> > I am still running into a > > conceptual > > >> difficulty here > > >> >> as I > > >> >> > want to pass around a > > dictionary/map > > >> structure of some > > >> >> kind > > >> >> > of attribute value pairs. > > >> >> > > > >> >> > Eg. [(String, [Node])] or > > [(String,String)] > > >> which I > > >> >> can > > >> >> > manipulate in my own monad and > then > > pass to > > >> Heist when > > >> >> and > > >> >> > if I choose. > > >> >> > > > >> >> > But bindSplice takes a > function > > where I would > > >> want a > > >> >> > dictionary. > > >> >> > > > >> >> > I am obviously lacking in > > Heist-foo. > > >> >> > > > >> >> > What to do? > > >> >> > > > >> >> > Kevin > > >> >> > > > >> >> > --- On Thu, 6/17/10, > MightyByte > > <[email protected]> > > >> >> > wrote: > > >> >> > > > >> >> > > From: MightyByte <[email protected]> > > >> >> > > Subject: Re: [Snap > Framework] > > >> renderTemplate with > > >> >> XML > > >> >> > fragments in Heist > > >> >> > > To: "Kevin Jardine" <[email protected]> > > >> >> > > Date: Thursday, June 17, > 2010, > > 3:55 PM > > >> >> > > Yeah, this was our > intent. > > >> >> > > renderTemplate is the only > way > > to get > > >> >> > > things out of > TemplateMonad. > > By using > > >> >> bindSplice as > > >> >> > I > > >> >> > > mentioned > > >> >> > > above, you keep your data > is > > structured > > >> nodes > > >> >> when > > >> >> > > possible. > > >> >> > > bindStrings is only > intended as > > a > > >> convenient way > > >> >> to > > >> >> > pass > > >> >> > > strings into > > >> >> > > templates. > > >> >> > > > > >> >> > > On Thu, Jun 17, 2010 at > 9:47 > > AM, Kevin > > >> Jardine > > >> >> <[email protected]> > > >> >> > > wrote: > > >> >> > > > Or am I making a > > conceptual error > > >> here? > > >> >> > > > > > >> >> > > > Perhaps I should be > using > > >> runTemplate to get > > >> >> the > > >> >> > XML > > >> >> > > fragments and only use > > renderTemplate at > > >> the very > > >> >> top > > >> >> > > level? > > >> >> > > > > > >> >> > > > This would keep the > input > > as > > >> structured > > >> >> nodes > > >> >> > and > > >> >> > > convert to bytestrings > only at > > the last > > >> step. > > >> >> > > > > > >> >> > > > Kevin > > >> >> > > > > > >> >> > > > --- On Thu, 6/17/10, > Kevin > > Jardine > > >> <[email protected]> > > >> >> > > wrote: > > >> >> > > > > > >> >> > > >> From: Kevin > Jardine > > <[email protected]> > > >> >> > > >> Subject: > > renderTemplate with > > >> XML > > >> >> fragments > > >> >> > in > > >> >> > > Heist > > >> >> > > >> To: [email protected] > > >> >> > > >> Date: Thursday, > June > > 17, 2010, > > >> 3:38 PM > > >> >> > > >> If I call > > >> >> > > >> > > >> >> > > >> renderTemplate > > (bindStrings > > >> dict > > >> >> > > emptyTemplateState) > > >> >> > > >> templateName > > >> >> > > >> > > >> >> > > >> this works fine > if the > > dict > > >> values are > > >> >> all > > >> >> > > unstructured > > >> >> > > >> data. > > >> >> > > >> > > >> >> > > >> However, if they > are > > XML > > >> structures, > > >> >> the > > >> >> > resulting > > >> >> > > HTML is > > >> >> > > >> escaped, > presumably > > because > > >> bindStrings > > >> >> > inserts > > >> >> > > them as Text > > >> >> > > >> nodes. > > >> >> > > >> > > >> >> > > >> What function > instead > > of > > >> bindStrings do > > >> >> I > > >> >> > call to > > >> >> > > insert > > >> >> > > >> XML fragments? > > >> >> > > >> > > >> >> > > >> Kevin > > >> >> > > >> > > >> >> > > >> > > >> >> > > >> > > >> >> > > >> > > >> >> > > > > > >> >> > > > > > >> >> > > > > > >> >> > > > > > >> >> > > _______________________________________________ > > >> >> > > > Snap mailing list > > >> >> > > > [email protected] > > >> >> > > > http://mailman-mail5.webfaction.com/listinfo/snap > > >> >> > > > > > >> >> > > > > >> >> > > > >> >> > > > >> >> > > > >> >> > > > >> >> > > >> >> > > >> >> > > >> >> > > >> > > > >> > > > >> > > > >> > > > _______________________________________________ > > >> > Snap mailing list > > >> > [email protected] > > >> > http://mailman-mail5.webfaction.com/listinfo/snap > > >> > > > >> > > > > > > > > > > > > _______________________________________________ > > > Snap mailing list > > > [email protected] > > > http://mailman-mail5.webfaction.com/listinfo/snap > > > > > > > > > _______________________________________________ Snap mailing list [email protected] http://mailman-mail5.webfaction.com/listinfo/snap
