Как передать переменную в пользовательский тег в Liquid?

Я написал специальный тег в жидкости, и я хотел бы передать ему переменную. Жидкостные теги превратят любой параметр в строку.

Например:

{% nav page /some/url.html %}

Где страница является переменной.

Есть ли способ заставить Liquid обрабатывать страницу как переменную, а не строку?

Спасибо заранее!

Ответ 1

Если вы используете Jekyll специально, вы можете получить доступ к переменной страницы таким образом:

def render(context)
  page_url = context.environments.first["page"]["url"]

Ответ 2

У меня была аналогичная проблема. Я решил это, создав собственный метод поиска:

def look_up(context, name)
  lookup = context

  name.split(".").each do |value|
    lookup = lookup[value]
  end

  lookup
end

Чтобы использовать его, создайте что-то вроде этого:

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 

Ответ 3

Чтобы ответить на общий вопрос, а не на частную информацию о переменной страницы, вы также можете снова передать содержимое тега через анализатор Liquid:

def initialize(tag_name, markup, tokens)
  @markup = markup
  super
end

def render(context)
  content = Liquid::Template.parse(@markup).render context
end