问题:在Jekyll模板中为用户渲染二维码时,会保留所有用户的最后一个二维码:
我有这样的代码:
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..现在,当呈现页面时,它成功呈现页面,但为在同一页面上呈现的所有用户保留相同的对象(具有二维码)(他们必须在同一页面上)。
我非常确定问题在于,在某些情况下,我在创建新对象时没有删除旧对象,或者没有正确分配与全局变量相关的内容。
在这种情况下,每个用户应该有一个不同的二维码,但他们都有相同的二维码。
解决方法:
如果在摘录中添加标记,二维码标记将呈现得很好。
现在,有没有人可以解释一下,如果你像下面的例子一样在摘录中添加数据,为什么会为每个用户呈现一个不同的二维码,但是如果在前面作为变量添加,那么所有人都是一样的(将对所有人重复最后一个)?
---
category: staff
name: John Doe
qr: "http://www.johndoe.com/"
---
{% qr http://www.johndoe.com %}
John is really cool...发布于 2017-08-09 22:57:25
这是实际的修复方法:
require 'rqrcode_png'
class QrCodeTag < Liquid::Tag
include Jekyll::LiquidExtensions
def initialize(tag_name, url, tokens)
super
params = Shellwords.shellwords url
@url = url.strip
end
def render(context)
page_url = Liquid::Template.parse('{{'+@url+'}}').render context
qr = RQRCode::QRCode.new(page_url, size: 4) # Size increased because URLs can be long
png = qr.to_img
png = png.resize(120, 120)
<<-MARKUP.strip
<div class="qrcode">
<a href="#{page_url}" target="_blank"> <img src="#{png.to_data_url}" alt="#{page_url}"> </a>
</div>
MARKUP
end
end
Liquid::Template.register_tag('qr', QrCodeTag)因此,我们解析字符串并获得变量的实际值。
发布于 2017-08-09 18:50:36
{% qr person.qr %}正在传递string "person.qr",而不是相应的值。
你可以做{% qr {{p.qr}} %}。
https://stackoverflow.com/questions/45578585
复制相似问题