gpt4 book ai didi

Django 如何标记_safe 链接而不是 gettext 翻译中的参数

转载 作者:行者123 更新时间:2023-12-02 01:15:01 25 4
gpt4 key购买 nike

假设我们有这样一条消息:

            messages.add_message(request, messages.SUCCESS,
_('Document <a href="%(url)s">%(doc_type_name)s %(name)s (%(fname)s)</a> created.') % {
'doc_type_name': conditional_escape(document.doc_type.name),
'name': conditional_escape(document.title),
'fname': conditional_escape(document.name),
'url': document.get_absolute_url()
})

这里只有当我们用 {{ message|safe }} 显示消息时它才会起作用,但我们不希望这样,因为如果 %(name)< 中有一些代码 也会被执行。

如果我使用:

            messages.add_message(request, messages.SUCCESS,
mark_safe(_('Document <a href="%(url)s">%(doc_type_name)s %(name)s (%(fname)s)</a> created.') % {
'doc_type_name': conditional_escape(document.doc_type.name),
'name': conditional_escape(document.title),
'fname': conditional_escape(document.name),
'url': document.get_absolute_url()
}))

mark_safe 不起作用。

我在那里读了一个解决方案:https://stackoverflow.com/a/12600388/186202

但我在这里需要的是相反的情况:

_('Document %s created.') % mark_safe('')

一旦它通过 ugettext 函数,它就不再安全了。

我该怎么办?

最佳答案

您正试图通过将 HTML 置于 Python 代码中来混合 View 和逻辑。好吧,有时您只需要这样做,但事实并非如此。

mark_safe() 返回 Django 模板特殊处理的 SafeString 对象。如果 SafeString 由 ugettext 或 % 评估,您将再次获得字符串,这是预期的行为。您不能仅将格式化字符串标记为安全,或者使用文档名称/标题等完成输出,或者一切都不安全。即,它不会以这种方式工作。

您可以将 HTML 放入模板并使用 render_to_string(),这可能是最好的选择。

文档标题、名称和doc_type.name是否由用户设置?如果没有,您可以跳过 mark_safe 和 document 在文档属性中使用 HTML 作为功能。

关于Django 如何标记_safe 链接而不是 gettext 翻译中的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12623368/

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