gpt4 book ai didi

django - 如何在handlebars-django模板中引用静态文件

转载 作者:行者123 更新时间:2023-12-02 02:59:08 27 4
gpt4 key购买 nike

摘要:

我应该如何在 django 模板的 Handlebars 部分引用静态文件?如果我使用 verbatim 标签,我可以使用 Handlebars ,但是我不能使用 django 的 static 标签。

详细信息

在将应用程序转换为 Django 时,我遇到了一个使用 handelbars.js 来渲染 ajax-call-results 的部分。通过“Handlebars.js in Django templates”等,我发现了 {% verbatim %} 标签。

一个简单的 Handlebars 就可以很好地解决这个问题。但我还有一个部分,根据结果动态显示图像,如下所示:

<img src="path/{{ result }}.png">

现在,虽然如果我手动设置路径,效果很好,但我相信在 Django 中,像这样引用静态文件是一个很好的做法:

<img src="{% static 'path/file.png' %}">

不建议仅获取 static_url 常量,see for instance this blog

因此,除非有人有真正令人信服的理由来修复它,否则我认为最好使用 {% static %} 方法。

最简单的解决方案是将这两种技术结合起来,并逐字逐句地喷射模板。除了这看起来丑陋、难以辨认并且从一开始就不是一个好主意之外,它也行不通。

{% verbatim %}
<!-- handlebars -->
{% endverbatim %}
<img src="{% static 'path{% verbatim %}{{ result }}{% endverbatim %}' %}">
{% verbatim %}
<!-- handlebars -->
{% endverbatim %}

这一切以泪水结束,因为结果是

TemplateSyntaxError at /
Could not parse the remainder: ''path{%' from ''path{%'

也许可以在后端生成正确的静态 URL 并进行渲染。但后端不应该知道我们想要在模板中显示什么图像。

唯一的解决方案可能是使用后端的“相对”字符串(例如 path/result.png)对后端进行额外调用,并请求正确的静态链接?这并不难,但需要额外的调用,但事实不应该是这样。

那么我如何正确引用这些静态文件?

最佳答案

您不想划定 Handlebars 标签和 Django 标签之间的界限。也许最干净的解决方案是显式声明 Handlebars 标签,如下所示:

{{ "handlebars_variable"|handlebars }}

其中filter handlebars 定义如下 ( source ):

from django import template
register = template.Library()

@register.filter
def handlebars(value):
# str.format would require ugly escaping, so we use '%'
return '{{%s}}' % value

但这还不够:您想要将handlebars 标记传递给static,即使使用过滤器,您也无法直接执行此操作。但也许你可以尝试使用 with :

{% with "handlebars_variable"|handlebars as handlebars_tag %}
<img src="{% static handlebars_tag %}">
{% endwith %}

但即便如此还不够。您想在前面添加 path/。有多种选择供您选择:

  • 您可以使用基于 this answeradd 过滤器以及嵌套的 with 语句(呃)。
  • 您可以定义一个名为 setvar 的模板标记,就像这样做 here (如果你愿意的话)。
  • 您可以像这样定义一个临时模板标记(可能不太优雅):

    @register.filter
    def static_result_path(value):
    return 'result/{{%s}}' % value

    然后将模板代码更改为:

    <img src="{% static "handlebars_variable"|static_result_path %}">
  • 使用get_static_prefix (最简单的!):

    <img src="{% get_static_prefix %}result/{{ "handlebars_variable"|handlebars }}" />
  • (总有 Jinja 。)

关于django - 如何在handlebars-django模板中引用静态文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38280386/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com