从相同模板中的Jekyll插件渲染不同的标签

时间:2017-08-08 21:53:42

标签: ruby jekyll

问题:   在Jekyll模板中为用户呈现QR码保留所有用户的最后QR:

我有这段代码:

的index.html

    {% for person in staff %}
        {% qr person.qr %}
    {% endfor %}

qr.rb

require 'rqrcode_png'
class QrCodeTag < Liquid::Tag
  def initialize(tag_name, url, tokens)
    super
    @url = url.strip
  end

  def lookup(context, name)
    lookup = context
    name.split(".").each { |value| lookup = lookup[value] }
    lookup
  end

  def render(context)
    page_url = "#{lookup(context, 'site.url')}#{lookup(context, @url)}"
    qr = RQRCode::QRCode.new(page_url, size: 10) # Size increased because URLs can be long
    png = qr.to_img
    <<-MARKUP.strip
    <div class="qrcode">
      <img src="#{png.to_data_url}" alt="#{page_url}">
    </div>
    MARKUP
  end
end

Liquid::Template.register_tag('qr', QrCodeTag)

2017-09-01-john-doe.md

---
category: staff
name: John Doe
qr: "http://www.johndoe.com/"
---

John is really cool...

2017-09-02-maria-doe.md

---
category: staff
name: John Doe
qr: "http://www.mariadoe.com/"
---

Maria is really cool..

现在,在渲染页面时,它会渲染 页面成功但保持相同的对象(使用QR码) 对于在同一页面上呈现的所有用户(它们必须位于同一页面上)。

我非常确定问题在于,在创建新对象或未正确分配的全局变量时,我不会删除旧对象。

在这种情况下,每个用户应该有不同的QR码,但它们都具有相同的功能。

解决方法:

如果您在摘录中添加标记,则可以使qr代码标记正常。

现在有没有人可以解释为什么如果你在摘录中添加数据,如下面的例子,它将为每个用户呈现不同的QR码,但如果这被添加为前面的变量将是相同的所有(最后一个会重复)?

---
category: staff
name: John Doe
qr: "http://www.johndoe.com/"
---

{% qr http://www.johndoe.com %}
John is really cool...

2 个答案:

答案 0 :(得分:0)

{% qr person.qr %}正在传递string "person.qr",而不是相应的值。

你可以{% qr {{p.qr}} %}

答案 1 :(得分:0)

这是实际修复:

import parent.one.anotherfile

因此,我们解析字符串并获取变量的实际值。