web-dev-qa-db-ja.com

djangoテンプレート、他の文字列で置換する文字列を検索

ヘイ、私はいくつかのテンプレートを書いていますが、文字列内で ""を "_"に変換したいです。

の出力を変換したい

{{ user.name }}

「My Name」のようなものから「My_Name」まで。どうすればいいですか?

28
dotty

この置換を行うための組み込みのタグまたはフィルターはありません。特定の文字で分割するフィルターを作成し、それをjoinフィルターと組み合わせるか、直接置換を行うフィルターを作成します。

Matthijsの回答の短縮版:

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

もちろん、空白で分割する場合にのみ機能します。

80
daniel

私は私のビュー/コントローラーコードでこのタイプの変換を実行するのが好きです:

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(' ','_')
7
Matthijs

独自のカスタムタグを記述したくない場合は、次のようにすることができます...

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

しかし、非常に冗長です...

4
Matthijs