1.7 specific: If you turn the conf property template.provide.scope.control to true, the 'ica' (internal context adapter) will contain the current template name (and it will work with #parse() and alike).

Now you need to get ahold of the ica. You have several ways of doing this, for instance:

- use a custom directive
- use an event handler
- populate your context with a Renderable reference


  Claude

On 04/05/2023 12:10, Mike Kienenberger wrote:
It's been awhile, so you might need to fact-check this post.

If I recall correctly, your context only has information that's been
provided by you, either directly with "put" or indirectly via helper code
you add.

While it's true that velocity itself knows all of that information, your
context is isolated from all of that.    So you could put a reference to
velocity internals into your template, I suppose.   Or better a simple tool
that only provides specific information about the current velocity
internals.

Are you trying to get the name of the main template you are creating?   If
so, it's really easier to just provide it at the time you specify it in
your code.

But if you are trying to get the name of an included template or the
current macro, then you'd need to build some kind of velocity-inspection
tool.

I seem to recall trying to do something similar many years ago (I only
cared about the main template name), and I think someone else gave me the
same advice:  Just put what you are looking for directly into the context
yourself.   But I think that still holds true for the more advanced case.

On Wed, May 3, 2023 at 7:33 PM Christopher Schultz <
ch...@christopherschultz.net> wrote:

Mike,

What about calling #parse and other (?) types of includes? Same thing with
macros which call other macros etc. Velocity must already know what’s going
on. Can’t the template get access to that?

-chris

On May 3, 2023, at 17:30, Mike Kienenberger <mkien...@gmail.com> wrote:

Rather than trying to get the internal name, you'd probably be better
off
injecting the name yourself.  You normally have access to the name of the
template around the same time that you set up the context.


On Wed, May 3, 2023 at 11:42 AM Christopher Schultz <
ch...@christopherschultz.net> wrote:

All,

I'd like too be able to get access to the name of the template currently
being rendered. It looks like that information should be in the
VelocityContext being used, but I'm having trouble getting a reference
to that.

This is in a webapp situation, and I'm using velocity-tools so I tried
the ContextTool which will give me a ChainedContext which implements the
Context interface but I'm not sure where to go from there. For example,
I don't see a way to walk my way up the chain to the
most-parent-context, or really anything that would give me access to
e.g. getCurrentTemplateName.

Is there a "standard" way to do this?

I'm using Velocity 1.7 at this point (yeah, I know). I'm perfectly happy
to hack it a little bit and I already have a custom
VelocityLayoutServlet with a custom mergeTemplate method, so ther is an
opportunity there to inject some instrumentation.

Thanks,
-chris

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscr...@velocity.apache.org
For additional commands, e-mail: user-h...@velocity.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscr...@velocity.apache.org
For additional commands, e-mail: user-h...@velocity.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscr...@velocity.apache.org
For additional commands, e-mail: user-h...@velocity.apache.org

Reply via email to