Beefy Boxes and Bandwidth Generously Provided by pair Networks
more useful options

Re: When to use templates?

by Mutant (Priest)
on Nov 19, 2004 at 15:41 UTC ( #409018=note: print w/replies, xml ) Need Help??

in reply to When to use templates?

Except for very basic (probably one-shot) scripts, I always use templates for HTML. I usually use HTML::Template, which has low overhead (more in the sense of programming time than computer time), and is very simple to use. I can't think of too many cases where I wouldn't want to use HTML::Template (or another templating system).

The main reason is getting the HTML as far away from your code as possible. Once you do this, a lot of problems just don't exist anymore.

While sometimes templating systems can give you a performance hit (not that this is usually too important - network speed is far more of an issue for the vast majority of users hitting your scripts) they often make it easier to tune performance if you need to.

Replies are listed 'Best First'.
Re^2: When to use templates?
by zejames (Hermit) on Nov 19, 2004 at 16:13 UTC
    I agree with Mutant. However, sometimes HTML::Template is quite limited (especially for complex "IF" statement).

    I'd advise to extend HTML::Template by using HTML::Template::Expr, that is fully compatible with the former (through object heritage I guess), but allows you to do more.


      *Purest Alert*

      Why do you need complex IF statements in your template? samtregar's idea for HTML::Template was to separate the two. If you introduce complexity into your template you create a Meta-language where code and data are again mixed. And designers get confused :)

      I believe its much better to leave complex stuff in Perl which is very good at handling it and output the appropriate data to the template from there.

      I do make use of HTML::Template's simple IF statements (and I wish there was an elseif) but beyond them I don't think its appropriate to further extend a meta-language.

        I agree mostly with that sentiment. However, I have found myself putting display oriented variables in my perl code lately.

        For example, with HT, I would need to do a ...

        # In the perl $template->param(SHOULD_I_DISPLAY_THIS => ($foo + $bar) > 2); ------- <!-- In the template --> <TMPL_IF SHOULD_I_DISPLAY_THIS>this</TMPL_IF>

        With HTE, I could use...

        <TMPL_IF EXPR="(FOO + BAR) > 2">this</TMPL_IF>

        It leaves the display decisions in the hands of the interface / html coder, and the data collection to the perl program. It is hard (you mentioned not having a TMPL_ELSIF) to do an N (where N>2) way decision, or a decision based on the quantity of something.

        Another example...

        Without creating display variables in your perl code (x_gt_3, x_gt_5, ...), how would you change the style of something based on its value?

        • Green if X < 3
        • orange if 3 <= X < 5
        • red if 5 <= X

        As I said above, I typically don't like using HTE, but I am running into more instances where it could prove to be useful, and would remove some of the variables controling display from my perl code.


        I said complex statement, meaning statement not only based on boolean variable passed par the perl script.

        In HTML::Template for example, you cannot test in the template if $var > 5, you have to do it the script ($bool = $var > 5;) and then use the result the a TMPL_IF.

        I do not like it very much. However, I do respect Your Way To Code It ;) That's a matter of choice.


      I think if it gets to the point where you really need more complex functionality, then you may want to look at Mason or Template Toolkit (or whatever you choose). The limitations of HTML::Template are by design.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://409018]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others chilling in the Monastery: (6)
As of 2018-06-24 19:51 GMT
Find Nodes?
    Voting Booth?
    Should cpanminus be part of the standard Perl release?

    Results (126 votes). Check out past polls.