如何在另一个标签中使用 Django 模板标签?

Posted

技术标签:

【中文标题】如何在另一个标签中使用 Django 模板标签?【英文标题】:How to use Django template tag within another tag? 【发布时间】:2016-10-22 08:13:49 【问题描述】:

我有一个 Django 网站,我正在努力使其国际化。图像文件都是用两个字母的语言代码编码的。因此,当用户切换语言时,对图像文件的引用会使用模板中的语言代码进行更新,如下所示:

<img src="% static 'website/images/contact_us_ LANGUAGE_CODE .png' %">

问题是,我还必须为静态内容的路径添加一个标签。有什么优雅的方法可以解决这个问题?

【问题讨论】:

已经在***.com/questions/37893356/… 中讨论过——你不能把它从你的视野中传递出去,然后你就可以使用它 我也遇到了同样的问题,您也可以查看my question 和相关答案。 @dmitryro 我认为他的问题不在于将数据传递给视图。我想他明白了这一点。他的问题更多是关于使用“静态标签中的模板标签”(这实际上似乎不可能)。他应该根据我在类似问题上得到的答案使用 |add 函数(详见上文) 你创建一个自定义模板标签,加载它 % load your_tags % 并使用它 % your_tag|code % 这将一起解决问题docs.djangoproject.com/en/1.9/howto/custom-template-tags 感谢大家的贡献,问题解决了! :) 【参考方案1】:

根据@MarAja 的建议,我遵循了他/她的问题和解决方案here,这实际上与我的相同。我正在发布我所做的,所以无论是谁登陆这个页面都有一个解决方案。在我的研究过程中,我没有偶然发现@MarAja 的帖子。

代码是一个精确的副本,选择不使用add 标签是因为根据 Django 文档,它会尝试将参数转换为 int,即不用于字符串。

完整代码:

# Custom Template tag file named "custom_app_tags.py"
from django import template

register = template.Library()

@register.filter
def addstr(s1, s2):
    return str(s1) + str(s2)

最后,用法:

% load staticfiles %
% load i18n %
% get_current_language as LANGUAGE_CODE %
% load custom_app_tags %

<img src="% static 'website/images/contact_us_'|addstr:LANGUAGE_CODE|addstr:'.png' %">

请注意,我将所有内容都包含在内,以便稍后到达这里的人可以全面了解正在发生的事情。

【讨论】:

以上是关于如何在另一个标签中使用 Django 模板标签?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Django 模板和标签而不使用 Django 的其余部分

如何为访问控制编写 Django 模板标签?

如何为 django 模板中的标签创建动态 id

如何告诉 Django 模板不要解析包含看起来像模板标签的代码的块?

在另一个模板中显示来自 Django 视图的 HTML 表

如何在 Django 模板中嵌套或联合使用两个模板标签?