问题: 在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...
答案 0 :(得分:0)
{% qr person.qr %}
正在传递string "person.qr"
,而不是相应的值。
你可以{% qr {{p.qr}} %}
。
答案 1 :(得分:0)
这是实际修复:
import parent.one.anotherfile
因此,我们解析字符串并获取变量的实际值。