是否有可能在液体模板中有选择地呈现特定标签,并将其余部分留给第二次渲染?
我的网页包含代码段(包含)和变量。片段存储在数据库中,并且呈现起来很昂贵。变量仅在运行时可用(通过登录页面方案中的URL请求)。我希望使用呈现的片段缓存页面内容,但所有剩余的液体标记都不会受到影响。
所以,如果我有
{% snippet header %}
{% if vars.first_name %}
Welcome, {{ vars.first_name }}
{% endif %}
{% snippet footer %}
我希望缓存的页面内容为:
The header content
{% if vars.first_name %}
Welcome, {{ vars.first_name }}
{% endif %}
The footer content
在运行时,这将从memcached存储中获取并呈现:
The header content
Welcome, John
The footer content
关于如何实现这一目标的任何想法?
更新:以下是我已经拥有的内容: (它有效,但我正在寻找一种更清洁,理想的液体解决方案。)
A" vars"使用给定名称生成变量的标记:
{% vars first_name %} #=> {{ vars.first_name }}
并且,我使用修改过的液体标记来表示我第一次不想渲染的所有内容:
{* if vars.first_name *}
因此,目前初始页面如下所示:
{% snippet header %}
{* if vars.first_name *}
Welcome, {% vars first_name %}
{* endif *}
{% snippet footer %}
一次呈现并缓存为:
The header content
{* if vars.first_name *}
Welcome, {{ vars.first_name }}
{* endif *}
The footer content
然后在运行时我检索缓存版本并将{*
替换为{%
等来获取
The header content
{% if vars.first_name %}
Welcome, {{ vars.first_name }}
{% endif %}
The footer content
我再次用液体渲染以达到预期的效果。
这可以完成工作,但不是纯粹的液体,我想知道是否有更清洁的解决方案。
有吗?
答案 0 :(得分:1)
{% snippet header %}
{% raw %}{% if vars.first_name %}
Welcome, {{ vars.first_name }}
{% endif %}{% endraw %}
{% snippet footer %}
这应该是你想要缓存的渲染,然后如果你通过Liquid重新渲染它,我会认为它会处理运行时变量。