提取 Mustache 变量以用于 Django 模板标签

Extract Mustache variable for use in Django template tag

我正在为 Django 实现 Algolia 的搜索 API,并且我有一个特定的 Mustache 变量 {{ObjectID}} 对应于搜索结果的 ID。我只能使用 via {% verbatim %} {{ObjectID}} {% endverbatim %} 而不会与 Django 的模板语法冲突。

然而,我还需要这个变量来为 ID 构造一个 url,但问题是我无法轻松地将 Mustache 变量传递到可直接与 Django 模板一起使用的表单中。例如,简单地做

{% url "appName:method" {{ObjectID}} %}

与 Django 的模板语法冲突,但试图通过

ivnoke verbatim
{% url "appName:method" {%verbatim %} {{ObjectID}} {% endverbatim %} %}

也不起作用,因为不允许在模板标签中调用模板标签。

我也无法将 {{ObjectID}} 存储为方法的临时变量或离岸 url 到单独的方法,例如

function generate (objectID){
    return "{% url 'appName:method' objectID %}"
}

//usage of method

<a href = "generate({% verbatim %}{{ObjectID}} {% endverbatim %})">link</a>

因为 Django 会立即处理 url 并抛出 NoReverseMatch 因为 objectID 还没有被 Algolia 定义。有没有办法提取 {{ObjectID}} 以便它可以通过管道返回到 Django 的 url 构造函数中?

注意:我的 Algolia 实现不直接与 Django 的数据库交互,而是它自己对单独存储的数据库进行索引。有关 algoliasearch-django's Github

的更多信息

我建议您在视图中使用类似这样的东西并将值传递给模板:

reverse('appName:method', args=[1337]).replace('1337', '{{ObjectID}}')

如果你必须只在模板中做,并且你可以确定 {{ObjectID}} 部分总是在 URL 的末尾,你可以这样做:

{% url "appName:method" 1337 as my_url %} <a href="{{ my_url|slice:":-5" }}{% verbatim %}{{ObjectID}}{% endverbatim %}/">...</a>

请注意,上面的模板代码采用尾部斜杠。