首页 > 解决方案 > 提取 Mustache 变量以在 Django 模板标签中使用

问题描述

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

但是,我还需要这个变量来构造 ID 的 url,但问题是我不能轻松地将 Mustache 变量传递到可直接用于 Django 模板的表单中。例如,简单地做

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

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

{% 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 将处理onSighturl和 throw NoReverseMatchsinceobjectID尚未由 Algolia 定义。有没有一种方法可以提取出来{{ObjectID}},以便可以将其通过管道返回到 Django 的url构造函数中?

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

标签: pythondjangoalgolia

解决方案


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

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>

请注意,上面的模板代码假定尾部有斜杠。


推荐阅读