【问题标题】:Make the first letter uppercase inside a django template将 django 模板中的第一个字母大写
【发布时间】:2012-12-25 10:55:52
【问题描述】:

我正在从存储为myname 的数据库中提取一个名称。如何在 Django 模板中将其显示为Myname,第一个字母为大写。

【问题讨论】:

    标签: django django-templates


    【解决方案1】:

    使用名为title的Django内置模板过滤器

    {{ "myname"|title }}
    

    【讨论】:

    • 它适用于单字字符串。但是,如果你有一个多词字符串,它会在每个单词的第一个字母上,而不是字符串的第一个字母。
    • 这对于像“我朋友的房子”或“你是个大写的怪胎”这样变成“朋友的”和“你”这样的撇号是没有用的。
    • 这个答案是错误的。 |title 不会将字符串的第一个字母变为大写。它使每个单词的第一个字母大写。例如,“hello world”不会变成“Hello world”。它变成了“Hello World”。
    • 使用 {{ obj | capfirst }} 仅将第一个字符设为大写。使用 {{ 对象 | title }} 使它成为 Camel Case。
    【解决方案2】:

    我知道有点晚了,但你可以使用capfirst

    {{ "waiting for action"|capfirst }}
    

    这将导致“等待操作”

    【讨论】:

    • 如果您只想将第一个字母大写,这是正确的答案。
    • 这将确保第一个字符为大写,但不会确保字符串的其余部分为小写。例如“hello World”会变成“Hello World”,而不是“Hello world”。这有时很好,但并非总是如此:)
    • 是的,但这与主题启动器的问题无关。必须应用额外的过滤器来处理额外的逻辑。例如,@bjorn-garcia 提供了一种确保只有第一个单词大写的解决方案。
    【解决方案3】:

    如果您有多个单词(例如全部大写),此解决方案也适用:

    {{ "ALL CAPS SENTENCE"|lower|capfirst }}
    

    这将输出“All caps sentence”。

    【讨论】:

      【解决方案4】:

      title 过滤器工作正常,但如果您有一个多字字符串,例如:"some random text",则结果将是 "Some Random Text"。如果您真正想要的是将整个字符串的第一个字母大写,您应该创建自己的自定义过滤器。

      您可以像这样创建一个过滤器(按照有关如何从 doc 创建自定义模板过滤器的说明进行操作 - 这很简单):

      # yourapp/templatetags/my_filters.py
      from django import template
      
      register = template.Library()
      
      @register.filter()
      def upfirstletter(value):
          first = value[0] if len(value) > 0 else ''
          remaining = value[1:] if len(value) > 1 else ''
          return first.upper() + remaining
      

      然后,您应该在模板中加载 my_filters 文件,并使用那里定义的过滤器:

      {% load my_filters %}
      
      ...
      {{ myname|upfirstletter }}
      

      【讨论】:

      【解决方案5】:

      它在模板变量中对我有用。

      {{ user.username|title }}
      

      如果用户是“al hasib”,那么它将返回“Al Hasib”

      {{ user.username|capfirst }}
      

      如果用户是“hasib”,那么最后一个将返回“Hasib”

      两者看起来相似,但有一些不同。

      【讨论】:

      • 这是默认用法,这对我有用。谢谢
      【解决方案6】:

      使用 {{"myname"|title}} 这将使每个单词的第一个字母大写

      【讨论】:

      • 是的,这个过滤器有效。谢谢
      【解决方案7】:

      只需使用{{myname | capfirst}} 在 Django 中,模板过滤器 capfirst 将给定字符串的第一个字母大写。

      【讨论】:

        猜你喜欢
        • 2018-07-08
        • 1970-01-01
        • 1970-01-01
        • 2013-09-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-29
        • 1970-01-01
        相关资源
        最近更新 更多