首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在同一模板中渲染来自Jekyll插件的不同标签

在同一模板中渲染来自Jekyll插件的不同标签
EN

Stack Overflow用户
提问于 2017-08-09 05:53:42
回答 2查看 80关注 0票数 0

问题:在Jekyll模板中为用户渲染二维码时,会保留所有用户的最后一个二维码:

我有这样的代码:

index.html

代码语言:javascript
复制
    {% for person in staff %}
        {% qr person.qr %}
    {% endfor %}

qr.rb

代码语言:javascript
复制
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

代码语言:javascript
复制
---
category: staff
name: John Doe
qr: "http://www.johndoe.com/"
---

John is really cool...

2017-09-02-maria-doe.md

代码语言:javascript
复制
---
category: staff
name: John Doe
qr: "http://www.mariadoe.com/"
---

Maria is really cool..

现在,当呈现页面时,它成功呈现页面,但为在同一页面上呈现的所有用户保留相同的对象(具有二维码)(他们必须在同一页面上)。

我非常确定问题在于,在某些情况下,我在创建新对象时没有删除旧对象,或者没有正确分配与全局变量相关的内容。

在这种情况下,每个用户应该有一个不同的二维码,但他们都有相同的二维码。

解决方法:

如果在摘录中添加标记,二维码标记将呈现得很好。

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

代码语言:javascript
复制
---
category: staff
name: John Doe
qr: "http://www.johndoe.com/"
---

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

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-09 22:57:25

这是实际的修复方法:

代码语言:javascript
复制
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)

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

票数 0
EN

Stack Overflow用户

发布于 2017-08-09 18:50:36

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45578585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档