You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django与Algolia:使用Hogan和{% verbatim %}标签实现条件语句

解决Algolia Hit模板中{% if %}在verbatim标签内失效的问题

嘿,我正好碰到过类似的坑,来给你拆解下!首先得明确:你在{% verbatim %}标签里用{% if %}肯定不会生效——因为verbatim的核心作用就是告诉Algolia的模板引擎「别解析我里面的任何模板语法标记」,会把内容原封不动输出,所以{% if %}直接变成了普通文本,根本不会触发条件判断。

那是不是只用改JavaScript?其实有两种更灵活的解决方案,不一定非要全靠JS:

方案1:调整模板结构,把条件判断移出verbatim

如果你的verbatim只是用来包裹某一小段需要原样输出的内容(比如包含{{}}的第三方代码),那完全可以把{% if %}放在verbatim外面,只把需要原样输出的片段包进去就行。举个实际的例子:

<script type="text/html" id="hit-template">
  {% if hit.is_paid %}
    <!-- 付费位专属布局 -->
    <div class="paid-listing">
      <h3>{{ hit.title }}</h3>
      <span class="paid-badge">付费推荐</span>
      {% verbatim %}
        <!-- 这里的内容会原封不动输出,不会被模板引擎解析 -->
        <p>这段里的{{ 变量 }}不会被替换哦</p>
      {% endverbatim %}
    </div>
  {% else %}
    <!-- 普通位布局 -->
    <div class="regular-listing">
      <h3>{{ hit.title }}</h3>
    </div>
  {% endif %}
</script>

这样{% if %}在verbatim之外,就能被Algolia的模板引擎正常解析,同时保留你需要原样输出的内容。

方案2:用JavaScript的hitTemplate函数完全接管渲染

如果因为某些原因(比如整个模板都需要原样输出,或者模板结构太复杂)必须用verbatim,那确实可以通过修改JavaScript代码来解决——直接用JS的条件判断生成不同的HTML结构,完全绕开模板引擎的语法限制。

示例代码如下:

// 初始化Algolia搜索组件时,自定义hitTemplate函数
search.addWidgets([
  instantsearch.widgets.hits({
    container: '#hits',
    hitTemplate: function(hit) {
      // 用JS的if判断替代模板引擎的{% if %}
      if (hit.is_paid) {
        // 付费位的HTML结构,用模板字符串编写
        return `
          <div class="paid-listing">
            <h3>${hit.title}</h3>
            <span class="paid-badge">付费推荐</span>
            <!-- 这里的内容直接写,不需要verbatim,模板字符串会原样输出非${}的内容 -->
            <p>付费专属展示位</p>
          </div>
        `;
      } else {
        // 普通位的HTML结构
        return `
          <div class="regular-listing">
            <h3>${hit.title}</h3>
          </div>
        `;
      }
    }
  })
]);

这种方式的好处是完全可控,所有渲染逻辑都在JS里,不需要纠结模板引擎的语法限制。

总结

  • 不是必须只改JS:调整模板结构把条件判断移出verbatim是更直接的方案,适合大部分场景;
  • 如果模板结构受限,用JS的hitTemplate函数接管渲染确实能解决问题,而且灵活性更高。

内容的提问来源于stack exchange,提问作者user7179686

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:52:19