在Django模板中将第一个字母大写


113

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

Answers:


205

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

{{ "myname"|title }}

13
它适用于单字字符串。但是,如果您有多个单词的字符串,它将在每个单词的第一个字母的上方,而不是字符串的第一个字母。
Valdir Stumm Junior

然而,对于诸如“我的朋友的房子”或“您是大写的怪胎”这样的单引号(变成“ Friend'S”和“ You \'Re”)来说,它是没有用的。
2015年

2
这个答案是错误的。| title不会使字符串的首字母大写。它使每个单词的首字母大写。例如,“ hello world”不会变为“ Hello world”。变成“ Hello World”。
马库斯·林德

9
使用{{obj | capfirst}},使大写字母仅成为第一个字符。使用{{obj | title}}使其成为Camel Case。
Nrzonline 2015年

123

我知道已经有点晚了,但是您可以使用capfirst

{{ "waiting for action"|capfirst }}

这将导致“等待操作”


8
如果您只希望首字母大写,这是正确的答案。
里克·韦斯特拉

这将确保第一个字符为大写,但不能确保字符串的其余部分为小写。例如,“ hello World”将变为“ Hello World”,而不是“ Hello world”。有时候很好,但并非总是如此:)
Phil Gyford

是的,但这与主题启动程序的问题无关。必须应用其他过滤器来处理其他逻辑。例如,@ bjorn-garcia提供了一种确保仅首字母大写的解决方案。
oblalex


8

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

您可以创建一个这样的过滤器(按照有关如何从此文档创建自定义模板过滤器的说明-非常简单):

# 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 }}

1
downvote-复制了|capfirst
shuckc

您可以在此处查看django默认值的实现:github.com/django/django/blob/master/django/template/…–
phyatt

1

它在模板变量中为我工作。

{{ user.username|title }}

如果用户为“ al hasib”,则它将返回“ Al Hasib”

要么

{{ user.username|capfirst }}

如果用户为“ hasib”,则最后一个将返回“ Hasib”

两者看起来相似,但有一些区别。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.