in reply to Re: Template Toolkit Question
in thread Template Toolkit Question

I think absolute URLs are turned off by default in TT2. Isn't there a reason for this?

Allow me to provide some additional information. I chose to use TT2 because I want to separate the code from the HTML as much as possible. Ideally, I'd like to give our web designers creative control of the HTML (they are not coders).

They will be creating the HTML using Coda (an editor). All of the image links in the HTML are relative to the site's root directory (and this is fine by me). I would simply like to grab their HTML code and drop it into my TT2 wrapper whenever they make changes. I will then send my CGI generated output to the page using the [% content %] directive. Very clean solution for us.

The only problem is, I haven't figured out a way to make the image links work (or the external CSS for that matter).

I think I can use a TT2 config template, such as:

[% root = '/Users/mysilmaril/Sites/WIW' images = '$root/assets/images" %]
And then in my HTML image tags ... <img src="[% images %]/logo.jpg">

However, this would still require us to hardcode the [% images %] TT2 variable into the HTML. I was hoping to avoid this, but maybe it isn't possible?

Hope I'm not confusing everyone ...

Thanks.

Replies are listed 'Best First'.
Re^3: Template Toolkit Question
by almut (Canon) on May 19, 2010 at 22:20 UTC

    I think the easiest solution would be to have your designers type src="/images/logo.jpg"href="/css/wiw.css", etc. and then put the respective files in the directories

    /Users/mysilmaril/Sites/WIW/images /Users/mysilmaril/Sites/WIW/css

    (with /Users/mysilmaril/Sites/WIW/ being the webserver's configured document root)

    In this case, no additional mapping of path components like /images —> /assets/images would be required (via TT2 [% images %] or whatever).

    If you can't get your designers to type anything other than src="/logo.jpg", you could set up a RewriteRule to prepend /assets/images to any URI-path that ends in .jpg, .png, .gif, etc.

    P.S.: if you're going to use

    [% root = '/Users/mysilmaril/Sites/WIW' images = '$root/assets/images" %] ... <img src="[% images %]/logo.jpg">

    I'm pretty sure you don't want the /Users/mysilmaril/Sites/WIW part in there, as the image would then (most likely) be searched under

    /Users/mysilmaril/Sites/WIW/Users/mysilmaril/Sites/WIW/assets/images/

      Thank you for the help.

      I have no problem setting up an images directory as you've suggested.

      Coda (through dragging and dropping) actually sets up the image links like this:

      src="images/logo.jpg"

      assuming we change to the convention you've suggested (which we will). However, our problem arises when we dynamically create a new page using a Perl CGI. The Perl script is called from the cgi-bin directory inside the site's root directory. The script (using the TT2 wrapper which has image links like src="images/logo.jpg") creates HTML that actually tries to have the browser render image files from src="cgi-bin/images/logo.jpg".

      I just hard coded all of the image links with absolute URLs. It works fine in both Coda and TT2. Maybe this is the easiest way to deal with this issue? I'm just surprised with all the power TT2 offers through various config options that this can't be done without using absolute URLs. Of course, being totally new to TT2, I may be missing an obvious sol'n.

      Still interested in a more elegant sol'n if you have one ;-)

      Thanks!

        I'm just surprised with all the power TT2 offers through various config options that this can't be done

        TT2 doesn't semantically interpret your template text as HTML — it just fills in the template according to the template directives [% ... %] etc.   In other words, it doesn't "know" that the text src="images/logo.jpg" is an URI path of an image, so how should it selectively modify those parts of the template?

        All you could do is interpolate a TT2 variable like src="[% images %]/logo.jpg" (as you've already figured)...  but as you don't want to have the [% images %] hardcoded in the templates, there's little TT2 can do to help...

        So, either do the path mapping via the webserver configuration, or simply use absolute paths as already suggested, in which case it doesn't matter that your CGI script has the additional cgi-bin path component in its URI.