How to pass a variable into a custom tag in Liquid?
I have written a custom tag in liquid, and I'd like to pass a variable to it. Liquid tags will turn any parameter into a string.
For example:
{% n开发者_开发知识库av page /some/url.html %}
Where page is a variable.
Is there a way to get Liquid to treat page as a variable and not a string?
Thanks in advance!
If you are using Jekyll specifically, you can access the page variable this way:
def render(context)
page_url = context.environments.first["page"]["url"]
I had a similar problem. I solved it by creating a custom lookup method:
def look_up(context, name)
lookup = context
name.split(".").each do |value|
lookup = lookup[value]
end
lookup
end
To use it, create something like this:
def initialize(tag_name, markup, tokens)
@markup = markup
super
end
def render(context)
output = super
if @markup =~ /([\w]+(\.[\w]+)*)/i
@myvalue = look_up(context, $1)
end
do_something_with(@myvalue)
end
To answer the general question and not the part specifically about the page variable, you can also pass the contents of the tag through the Liquid parser again:
def initialize(tag_name, markup, tokens)
@markup = markup
super
end
def render(context)
content = Liquid::Template.parse(@markup).render context
end
精彩评论