【问题标题】:django templates, find string replace with other stringdjango模板,查找字符串替换为其他字符串
【发布时间】:2023-03-30 00:51:01
【问题描述】:

嘿,我正在编写一些模板,但我想在字符串中将“”转换为“_”。

我想转换输出

{{ user.name }}

从“我的名字”到“我的名字”。我该怎么做?

【问题讨论】:

    标签: django templates


    【解决方案1】:

    Matthijs 答案的简短版本:

    {{ user.name.split|join:"_" }}
    

    当然,它只在空格分割时有效。

    【讨论】:

    • 完美!正是我需要的!
    • 哇!我怎么错过了?
    【解决方案2】:

    没有内置的标签或过滤器来做这个替换。编写一个按给定字符拆分的过滤器,然后将其与join 过滤器组合,或者编写一个直接进行替换的过滤器。

    【讨论】:

    • 似乎我不能使用包含包含的自定义过滤器,有什么想法吗?
    • 对于未来的访问者,请参阅下面的@daniel 的answer,只需使用仅适用于空格的{{ user.name.split|join:"_" }}
    【解决方案3】:

    我喜欢在我的视图/控制器代码中执行这种类型的转换,即:

    user.underscored_name = user.name.replace(' ','_')
    context['user'] = user
    

    不要害怕只添加一个新的(临时)属性并在您的模板中使用它:

    {{ user.underscored_name }}
    

    如果您在更多地方使用此方法,请将方法 underscored_name 添加到 User 模型中:

    class User()
      def underscored_name(self):
        return self.name.replace(' ','_')
    

    【讨论】:

    • 只要属性没有被 django html 页面调用,它就可以工作。建议在类中设置一个self.underscored_name 字段。无论如何 +1,因为它帮助我解决了问题。
    【解决方案4】:

    如果您不喜欢编写自己的自定义标签,您可以这样做...

    {% for word in user.name.split %}{{word}}{% if not forloop.last %}_{% endif %}{% endfor %}
    

    但是它非常冗长......

    【讨论】:

      猜你喜欢
      • 2014-09-10
      • 2017-01-02
      • 2021-01-05
      • 1970-01-01
      • 1970-01-01
      • 2015-03-02
      • 1970-01-01
      • 1970-01-01
      • 2013-03-14
      相关资源
      最近更新 更多