Django Utils —Djangoドキュメント

提供:Dev Guides
< DjangoDjango/docs/3.2.x/ref/utils
移動先:案内検索

Django Utils

このドキュメントは、django.utilsのすべての安定したモジュールをカバーしています。 django.utilsのほとんどのモジュールは内部使用向けに設計されており、内部リリース非推奨ポリシーに従って、次の部分のみが安定していると見なすことができるため、下位互換性があります。

django.utils.cache

このモジュールには、HTTPキャッシングを制御するためのヘルパー関数が含まれています。 これは、応答のVaryヘッダーを管理することによって行われます。 これには、応答オブジェクトのヘッダーに直接パッチを適用する関数と、そのヘッダーパッチを実行するように関数を変更するデコレーターが含まれています。

Varyヘッダーの詳細については、 RFC 7231#section-7.1.4 を参照してください。

基本的に、Vary HTTPヘッダーは、キャッシュキーを構築するときにキャッシュが考慮する必要のあるヘッダーを定義します。 Varyで指定されたヘッダーのパスは同じで、ヘッダーコンテンツが異なるリクエストは、間違ったコンテンツの配信を防ぐために、異なるキャッシュキーを取得する必要があります。

たとえば、国際化ミドルウェアは、Accept-languageヘッダーによってキャッシュを区別する必要があります。

patch_cache_control(response, **kwargs)

この関数は、すべてのキーワード引数を追加することにより、Cache-Controlヘッダーにパッチを適用します。 変換は次のとおりです。

  • すべてのキーワードパラメータ名は小文字に変換され、アンダースコアはハイフンに変換されます。

  • パラメーターの値がTrue(真の値だけでなく、正確にTrue)の場合、パラメーター名のみがヘッダーに追加されます。

  • 他のすべてのパラメーターは、str()を適用した後、それらの値とともに追加されます。

バージョン3.1で変更: no-cacheディレクティブでの複数のフィールド名のサポートが追加されました。

get_max_age(response)
応答Cache-Controlヘッダーからmax-ageを整数(または、見つからなかった場合や整数でない場合はNone)として返します。
patch_response_headers(response, cache_timeout=None)

指定されたHttpResponseオブジェクトにいくつかの便利なヘッダーを追加します。

  • Expires

  • Cache-Control

各ヘッダーは、まだ設定されていない場合にのみ追加されます。

cache_timeoutは秒単位です。 :setting: `CACHE_MIDDLEWARE_SECONDS` 設定がデフォルトで使用されます。

add_never_cache_headers(response)
Cache-Control: max-age=0, no-cache, no-store, must-revalidate, privateヘッダーを応答に追加して、ページをキャッシュしてはならないことを示します。
patch_vary_headers(response, newheaders)
指定されたHttpResponseオブジェクトにVaryヘッダーを追加(または更新)します。 newheadersは、Varyに含める必要のあるヘッダー名のリストです。 ヘッダーにアスタリスクが含まれている場合、 RFC 7231#section-7.1.4 に従って、Varyヘッダーは単一のアスタリスク'*'で構成されます。 それ以外の場合、Varyの既存のヘッダーは削除されません。
get_cache_key(request, key_prefix=None, method='GET', cache=None)

リクエストパスに基づいてキャッシュキーを返します。 グローバルパスレジストリから考慮に入れるヘッダーのリストを取得し、それらを使用してチェックするキャッシュキーを構築するため、リクエストフェーズで使用できます。

ヘッダーリストが保存されていない場合は、ページを再構築する必要があるため、この関数はNoneを返します。

learn_cache_key(request, response, cache_timeout=None, key_prefix=None, cache=None)

応答オブジェクトからの要求パスに対して考慮すべきヘッダーを学習します。 これらのヘッダーをグローバルパスレジストリに格納するため、後でそのパスにアクセスすると、応答オブジェクト自体を作成しなくても、考慮すべきヘッダーがわかります。 ヘッダーは、応答のVaryヘッダーで名前が付けられていますが、応答が生成されないようにする必要があります。

キャッシュキーの生成に使用するヘッダーのリストは、ページ自体と同じキャッシュに保存されます。 キャッシュがキャッシュから一部のデータをエージングする場合、これは、Varyヘッダー、およびキャッシュキーに使用するヘッダーのリストを取得するために、応答を1回作成する必要があることを意味します。


django.utils.dateparse

このモジュールで定義されている関数は、次のプロパティを共有しています。

  • これらは、ISO 8601日付/時刻形式(またはいくつかの近い代替)の文字列を受け入れ、Pythonのdatetimeモジュールの対応するクラスからオブジェクトを返します。
  • 入力が適切にフォーマットされているが、有効な日付または時刻ではない場合、ValueErrorが発生します。
  • 正しくフォーマットされていない場合は、Noneを返します。
  • 入力では最大ピコ秒の解像度を受け入れますが、Pythonがサポートしているので、マイクロ秒に切り捨てます。
parse_date(value)
文字列を解析し、datetime.dateを返します。
parse_time(value)

文字列を解析し、datetime.timeを返します。

UTCオフセットはサポートされていません。 valueが1つを表す場合、結果はNoneになります。

バージョン3.1で変更:ミリ秒単位のコンマ区切り文字のサポートが追加されました。

parse_datetime(value)

文字列を解析し、datetime.datetimeを返します。

UTCオフセットがサポートされています。 valueが1つを表す場合、結果のtzinfo属性はdatetime.timezoneインスタンスです。

バージョン3.1で変更:ミリ秒単位のコンマ区切り文字のサポートが追加されました。

parse_duration(value)

文字列を解析し、datetime.timedeltaを返します。

"DD HH:MM:SS.uuuuuu""DD HH:MM:SS,uuuuuu"の形式、またはISO 8601で指定されている形式(例: P4DT1H15M20Sは、4 1:15:20と同等です)またはPostgreSQLの日中間隔形式(例: 3 days 04:05:06)。

バージョン3.1で変更: ISO8601形式および形式"DD HH:MM:SS,uuuuuu"の小数点のカンマ区切り文字のサポートが追加されました。


django.utils.decorators

method_decorator(decorator, name=)

関数デコレータをメソッドデコレータに変換します。 メソッドやクラスを装飾するために使用できます。 後者の場合、nameは装飾するメソッドの名前であり、必須です。

decoratorは、関数のリストまたはタプルの場合もあります。 呼び出し順序が関数がリスト/タプルに表示される順序になるように、これらは逆の順序でラップされます。

使用例については、クラスベースビューの装飾を参照してください。

decorator_from_middleware(middleware_class)

ミドルウェアクラスを指定すると、ビューデコレータを返します。 これにより、ビューごとにミドルウェア機能を使用できます。 ミドルウェアは、パラメータが渡されない状態で作成されます。

これは、古いスタイルのDjango 1.9以前と互換性のあるミドルウェア(process_request()process_exception()process_response()などのメソッドを持つ)を前提としています。

decorator_from_middleware_with_args(middleware_class)

decorator_from_middlewareと同様ですが、middleware_classに渡される引数を受け入れる関数を返します。 たとえば、 cache_page()デコレータは、CacheMiddlewareから次のように作成されます。

cache_page = decorator_from_middleware_with_args(CacheMiddleware)

@cache_page(3600)
def my_view(request):
    pass
sync_only_middleware(middleware)

バージョン3.1の新機能。

ミドルウェアを同期のみとしてマークします。 (Djangoのデフォルトですが、これにより、将来のリリースでデフォルトが変更された場合でも、将来にわたって利用できるようになります。)

async_only_middleware(middleware)

バージョン3.1の新機能。

ミドルウェアを非同期のみとしてマークします。 Djangoは、WSGIリクエストパスから呼び出されると、非同期イベントループでラップします。

sync_and_async_middleware(middleware)

バージョン3.1の新機能。

ミドルウェアを同期および非同期互換としてマークします。これにより、要求の変換を回避できます。 このデコレータを使用するには、現在のリクエストタイプの検出を実装する必要があります。 詳細については、非同期ミドルウェアのドキュメントを参照してください。


django.utils.encoding

smart_str(s, encoding='utf-8', strings_only=False, errors='strict')

任意のオブジェクトsを表すstrオブジェクトを返します。 encodingコーデックを使用してバイト文字列を処理します。

strings_onlyTrueの場合、(一部の)文字列に似ていないオブジェクトを変換しないでください。

is_protected_type(obj)

オブジェクトインスタンスが保護されたタイプであるかどうかを判別します。

保護されたタイプのオブジェクトは、force_str(strings_only=True)に渡されたときにそのまま保持されます。

force_str(s, encoding='utf-8', strings_only=False, errors='strict')

smart_str()と似ていますが、レイジーインスタンスがレイジーオブジェクトとして保持されるのではなく、文字列に解決される点が異なります。

strings_onlyTrueの場合、(一部の)文字列に似ていないオブジェクトを変換しないでください。

smart_bytes(s, encoding='utf-8', strings_only=False, errors='strict')

encodingで指定されているようにエンコードされた、任意のオブジェクトsのバイト文字列バージョンを返します。

strings_onlyTrueの場合、(一部の)文字列に似ていないオブジェクトを変換しないでください。

force_bytes(s, encoding='utf-8', strings_only=False, errors='strict')

smart_bytesと似ていますが、レイジーインスタンスがレイジーオブジェクトとして保持されるのではなく、バイト文字列に解決される点が異なります。

strings_onlyTrueの場合、(一部の)文字列に似ていないオブジェクトを変換しないでください。

smart_text(s, encoding='utf-8', strings_only=False, errors='strict')

バージョン3.0以降非推奨。

特にPython2をサポートするコードでの下位互換性のための、 force_str()のエイリアス。

force_text(s, encoding='utf-8', strings_only=False, errors='strict')

バージョン3.0以降非推奨。

特にPython2をサポートするコードでの下位互換性のための、 force_str()のエイリアス。

iri_to_uri(iri)

Internationalized Resource Identifier(IRI)部分を、URLに含めるのに適したURI部分に変換します。

これは、 RFC 3987#section-3.1 のセクション3.1のアルゴリズムですが、入力が任意のバイトストリームではなく文字列であると想定されているため、少し簡略化されています。

IRI(文字列またはUTF-8バイト)を受け取り、エンコードされた結果を含む文字列を返します。

uri_to_iri(uri)

ユニフォームリソース識別子を国際化リソース識別子に変換します。

これは、 RFC 3987#section-3.2 のセクション3.2のアルゴリズムです。

ASCIIバイトでURIを取得し、エンコードされた結果を含む文字列を返します。

filepath_to_uri(path)

ファイルシステムパスを、URLに含めるのに適したURI部分に変換します。 パスは、UTF-8バイト、文字列、またはPathのいずれかであると想定されます。

このメソッドは、通常URIの特殊文字として認識される特定の文字をエンコードします。 このメソッドは、URI内で有効な文字であるため、 '文字をエンコードしないことに注意してください。 詳細については、encodeURIComponent() JavaScript関数を参照してください。

エンコードされた結果を含むASCII文字列を返します。

バージョン3.1で変更: pathlib.Path pathのサポートが追加されました。

escape_uri_path(path)
URL(Uniform Resource Identifier)のパス部分から安全でない文字をエスケープします。


django.utils.feedgenerator

使用例:

>>> from django.utils import feedgenerator
>>> feed = feedgenerator.Rss201rev2Feed(
...     title="Poynter E-Media Tidbits",
...     link="http://www.poynter.org/column.asp?id=31",
...     description="A group Weblog by the sharpest minds in online media/journalism/publishing.",
...     language="en",
... )
>>> feed.add_item(
...     title="Hello",
...     link="http://www.holovaty.com/test/",
...     description="Testing.",
... )
>>> with open('test.rss', 'w') as fp:
...     feed.write(fp, 'utf-8')

ジェネレータの選択を簡素化するには、現在Rss201rev2Feedであるfeedgenerator.DefaultFeedを使用します。

RSSのさまざまなバージョンの定義については、 https://web.archive.org/web/20110718035220/http://diveintomark.org/archives/2004/02/04/incompatible-rssを参照してください。

get_tag_uri(url, date)

TagURIを作成します。

https://web.archive.org/web/20110514113830/http://diveintomark.org/archives/2004/05/28/howto-atom-idを参照してください

SyndicationFeed

class SyndicationFeed

すべてのシンジケーションフィードの基本クラス。 サブクラスはwrite()を提供する必要があります。

__init__(title, link, description, language=None, author_email=None, author_name=None, author_link=None, subtitle=None, categories=None, feed_url=None, feed_copyright=None, feed_guid=None, ttl=None, **kwargs)

フィード全体に適用される、指定されたメタデータの辞書を使用してフィードを初期化します。

__init__に渡す追加のキーワード引数は、self.feedに保存されます。

文字列のシーケンスであるcategoriesを除いて、すべてのパラメータは文字列である必要があります。

add_item(title, link, description, author_email=None, author_name=None, author_link=None, pubdate=None, comments=None, unique_id=None, categories=(), item_copyright=None, ttl=None, updateddate=None, enclosures=None, **kwargs)

フィードにアイテムを追加します。 datetime.datetimeオブジェクトであるpubdateupdateddate、およびEnclosureのリストであるenclosuresを除いて、すべての引数は文字列であると想定されます。 ]インスタンス。

num_items()
root_attributes()

ルートに配置する追加の属性を返します(つまり、 フィード/チャネル)要素。 write()から呼び出されます。

add_root_elements(handler)

ルートに要素を追加します(つまり、 フィード/チャネル)要素。 write()から呼び出されます。

item_attributes(item)

各アイテムに配置する追加の属性を返します(つまり、 item / entry)要素。

add_item_elements(handler, item)

各アイテムに要素を追加します(つまり、 item / entry)要素。

write(outfile, encoding)

ファイルのようなオブジェクトであるoutfileに、指定されたエンコーディングでフィードを出力します。 サブクラスはこれをオーバーライドする必要があります。

writeString(encoding)

指定されたエンコーディングのフィードを文字列として返します。

latest_post_date()

フィード内のすべてのアイテムの最新のpubdateまたはupdateddateを返します。 これらの属性のいずれかを持つアイテムがない場合、これは現在のUTC日付/時刻を返します。


Enclosure

class Enclosure
RSSエンクロージャを表します


RssFeed

class RssFeed(SyndicationFeed)


Rss201rev2Feed

class Rss201rev2Feed(RssFeed)
仕様: https://cyber.harvard.edu/rss/rss.html


RssUserland091Feed

class RssUserland091Feed(RssFeed)
仕様: http://backend.userland.com/rss091


Atom1Feed

class Atom1Feed(SyndicationFeed)
仕様: RFC 4287


django.utils.functional

class cached_property(func, name=None)

@cached_propertyデコレータは、プロパティとして単一のself引数を持つメソッドの結果をキャッシュします。 キャッシュされた結果はインスタンスが存続する限り存続するため、インスタンスが渡され、その後関数が呼び出された場合、キャッシュされた結果が返されます。

モデルインスタンスをコンテキストに配置する前に、ビューがモデルのメソッドを呼び出して計算を実行する必要がある典型的なケースを考えてみましょう。テンプレートは、メソッドをもう一度呼び出す可能性があります。

# the model
class Person(models.Model):

    def friends(self):
        # expensive computation
        ...
        return friends

# in the view:
if person.friends():
    ...

そして、テンプレートには次のものがあります。

{% for friend in person.friends %}

ここでは、friends()が2回呼び出されます。 ビューとテンプレートのインスタンスpersonは同じであるため、friends()メソッドを@cached_propertyで装飾すると、次のことを回避できます。

from django.utils.functional import cached_property

class Person(models.Model):

    @cached_property
    def friends(self):
        ...

メソッドはプロパティになっているため、Pythonコードでは適切にアクセスする必要があることに注意してください。

# in the view:
if person.friends:
    ...

キャッシュされた値は、インスタンスの通常の属性のように扱うことができます。

# clear it, requiring re-computation next time it's called
del person.friends # or delattr(person, "friends")

# set a value manually, that will persist on the instance until cleared
person.friends = ["Huckleberry Finn", "Tom Sawyer"]

記述子プロトコルの動作方法により、アクセスされていないcached_propertydel(またはdelattr)を使用すると、 [が発生します。 X142X]。

@cached_propertyは、潜在的なパフォーマンス上の利点を提供するだけでなく、インスタンスの存続期間中に属性の値が予期せず変更されないようにすることができます。 これは、計算がdatetime.now()に基づいているメソッドで発生する可能性があります。または、同じインスタンスでのメソッドの後続の呼び出しの短い間隔で、他のプロセスによって変更がデータベースに保存された場合に発生する可能性があります。

メソッドのキャッシュされたプロパティを作成できます。 たとえば、高価なget_friends()メソッドがあり、キャッシュされた値を取得せずに呼び出すことを許可したい場合は、次のように記述できます。

friends = cached_property(get_friends, name='friends')

必要なのはname Python <3.6サポートの引数。

person.get_friends()は呼び出しごとに友達を再計算しますが、キャッシュされたプロパティの値は、上記のように削除するまで保持されます。

x = person.friends         # calls first time
y = person.get_friends()   # calls again
z = person.friends         # does not call
x is z                     # is True
class classproperty(method=None)

バージョン3.1の新機能。

@classmethodと同様に、@classpropertyデコレータは、単一のcls引数を持つメソッドの結果を、クラスから直接アクセスできるプロパティに変換します。

keep_lazy(func, *resultclasses)

Djangoは、文字列を最初の引数として取り、その文字列に対して何かを行う多くのユーティリティ関数(特にdjango.utils)を提供します。 これらの関数は、テンプレートフィルターだけでなく、他のコードでも直接使用されます。

独自の同様の関数を作成して翻訳を処理する場合、最初の引数が遅延翻訳オブジェクトである場合にどうするかという問題に直面します。 ビューの外でこの関数を使用している可能性があるため、すぐに文字列に変換する必要はありません(したがって、現在のスレッドのロケール設定は正しくありません)。

このような場合は、django.utils.functional.keep_lazy()デコレータを使用してください。 関数を変更して、 if が引数の1つとして遅延変換を使用して呼び出された場合、関数の評価は文字列に変換する必要があるまで遅延します。

例えば:

from django.utils.functional import keep_lazy, keep_lazy_text

def fancy_utility_function(s, ...):
    # Do some conversion on string 's'
    ...
fancy_utility_function = keep_lazy(str)(fancy_utility_function)

# Or more succinctly:
@keep_lazy(str)
def fancy_utility_function(s, ...):
    ...

keep_lazy()デコレータは、元の関数が返すことができるタイプを指定するいくつかの追加の引数(*args)を取ります。 一般的な使用例は、テキストを返す関数を使用することです。 これらの場合、strタイプをkeep_lazyに渡すことができます(または次のセクションで説明する keep_lazy_text()デコレータを使用します)。

このデコレータを使用すると、関数を記述して入力が適切な文字列であると想定し、最後に遅延変換オブジェクトのサポートを追加できます。

keep_lazy_text(func)

keep_lazy(str)(func)のショートカット。

テキストを返す関数があり、評価を遅らせながら怠惰な引数を取ることができるようにしたい場合は、次のデコレータを使用できます。

from django.utils.functional import keep_lazy, keep_lazy_text

# Our previous example was:
@keep_lazy(str)
def fancy_utility_function(s, ...):
    ...

# Which can be rewritten as:
@keep_lazy_text
def fancy_utility_function(s, ...):
    ...


django.utils.html

通常、必要に応じて django.utils.safestring のユーティリティを使用して、自動エスケープメカニズムを利用するためにDjangoのテンプレートを使用してHTMLを構築する必要があります。 このモジュールは、HTMLをエスケープするためのいくつかの追加の低レベルユーティリティを提供します。

escape(text)
HTMLで使用するためにエンコードされたアンパサンド、引用符、山括弧を含む指定されたテキストを返します。 入力は最初に文字列に強制変換され、出力には mark_safe()が適用されます。
conditional_escape(text)
escape()と似ていますが、事前にエスケープされた文字列では機能しないため、ダブルエスケープされません。
format_html(format_string, *args, **kwargs)

これはstr.format()に似ていますが、HTMLフラグメントの構築に適している点が異なります。 すべての引数とkwargsは、str.format()に渡される前に、 conditional_escape()を通過します。

小さなHTMLフラグメントを作成する場合、この関数は、%またはstr.format()を直接使用する文字列補間よりも優先されます。これは、テンプレートシステムがエスケープを適用するのと同じように、すべての引数にエスケープを適用するためです。デフォルトでは。

したがって、書く代わりに:

mark_safe("%s <b>%s</b> %s" % (
    some_html,
    escape(some_text),
    escape(some_other_text),
))

代わりに以下を使用する必要があります。

format_html("{} <b>{}</b> {}",
    mark_safe(some_html),
    some_text,
    some_other_text,
)

これには、各引数に escape()を適用する必要がなく、バグやXSSの脆弱性を忘れるとリスクが生じるという利点があります。

この関数はstr.format()を使用して補間を実行しますが、str.format()によって提供されるフォーマットオプションの一部(例: すべての引数が conditional_escape()を介して渡され、値に対して(最終的に) force_str()が呼び出されるため、数値の書式設定)は機能しません。

format_html_join(sep, format_string, args_generator)

format_html()のラッパー。同じフォーマット文字列を使用してフォーマットし、sepを使用して結合する必要がある引数のグループの一般的なケース。 sepconditional_escape()を介して渡されます。

args_generatorは、 format_html()に渡されるargsのシーケンスを返すイテレーターである必要があります。 例えば:

format_html_join(
    '\n', "<li>{} {}</li>",
    ((u.first_name, u.last_name) for u in users)
)
strip_tags(value)

<>内に含まれているものである、HTMLタグのように見えるものを文字列から削除しようとします。

結果の文字列がHTMLセーフであるという保証はまったくありません。 したがって、[X95X] 呼び出しの結果を最初にエスケープせずに、たとえば escape()で安全とマークしないでください。

例えば:

strip_tags(value)

value"<b>Joel</b> <button>is</button> a <span>slug</span>"の場合、戻り値は"Joel is a slug"になります。

より堅牢なソリューションをお探しの場合は、 bleach Pythonライブラリをご覧ください。

html_safe()

クラスの__html__()メソッドは、Django以外のテンプレートが、出力にHTMLエスケープを必要としないクラスを検出するのに役立ちます。

このデコレータは、 mark_safe()__str__()をラップすることにより、装飾されたクラスの__html__()メソッドを定義します。 __str__()メソッドが実際にHTMLエスケープを必要としないテキストを返すことを確認してください。


django.utils.http

urlencode(query, doseq=False)
MultiValueDictおよび文字列以外の値を操作できるPythonのurllib.parse.urlencode()関数のバージョン。
http_date(epoch_seconds=None)

HTTP RFC 7231#section-7.1.1.1 [で指定されているように、 RFC 1123#section-5.2.14 日付形式に一致するように時刻をフォーマットします。 X142X]。

time.time()によって出力されるような、UTCのエポックからの秒数で表される浮動小数点数を受け入れます。 Noneに設定すると、デフォルトで現在の時刻になります。

Wdy, DD Mon YYYY HH:MM:SS GMTの形式で文字列を出力します。

base36_to_int(s)
36を底とする文字列を整数に変換します。
int_to_base36(i)
正の整数をベース36の文字列に変換します。
urlsafe_base64_encode(s)
URLで使用するためにbytestringをbase64文字列にエンコードし、末尾の等号を削除します。
urlsafe_base64_decode(s)
base64でエンコードされた文字列をデコードし、削除された可能性のある末尾の等号を追加します。


django.utils.module_loading

Pythonモジュールを操作するための関数。

import_string(dotted_path)

点線のモジュールパスをインポートし、パスの姓で指定された属性/クラスを返します。 インポートが失敗した場合、ImportErrorを発生させます。 例えば:

from django.utils.module_loading import import_string
ValidationError = import_string('django.core.exceptions.ValidationError')

と同等です:

from django.core.exceptions import ValidationError


django.utils.safestring

「安全な文字列」を操作するための関数とクラス:HTMLでさらにエスケープすることなく安全に表示できる文字列。 何かを「安全な文字列」としてマークするということは、文字列の作成者がHTMLエンジンによって解釈されるべきではない文字をすでに変換していることを意味します(例: '

class SafeString
HTML出力の目的で「安全」(これ以上エスケープする必要がない)として明確にマークされたstrサブクラス。
mark_safe(s)

文字列を(HTML)出力の目的で安全であると明示的にマークします。 返されたオブジェクトは、文字列が適切な場所であればどこでも使用できます。

1つの文字列で複数回呼び出すことができます。

デコレータとしても使用できます。

HTMLのフラグメントを構築するには、通常、代わりに django.utils.html.format_html()を使用する必要があります。

安全とマークされた文字列は、変更すると再び安全ではなくなります。 例えば:

>>> mystr = '<b>Hello World</b>   '
>>> mystr = mark_safe(mystr)
>>> type(mystr)
<class 'django.utils.safestring.SafeString'>

>>> mystr = mystr.strip()  # removing whitespace
>>> type(mystr)
<type 'str'>


django.utils.text

format_lazy(format_string, *args, **kwargs)

format_stringargs、および/またはkwargsに遅延オブジェクトが含まれている場合のstr.format()のバージョン。 最初の引数は、フォーマットする文字列です。 例えば:

from django.utils.text import format_lazy
from django.utils.translation import pgettext_lazy

urlpatterns = [
    path(format_lazy('{person}/<int:pk>/', person=pgettext_lazy('URL', 'person')),
         PersonDetailView.as_view()),
]

この例では、翻訳者がURLの一部を翻訳できます。 「person」が「persona」に翻訳される場合、正規表現はpersona/(?P<pk>\d+)/$に一致します。 persona/5/

slugify(value, allow_unicode=False)

次の方法で文字列をURLスラッグに変換します。

  1. allow_unicodeFalse(デフォルト)の場合、ASCIIに変換します。

  2. 小文字に変換します。

  3. 英数字、アンダースコア、ハイフン、または空白以外の文字を削除します。

  4. 空白または繰り返されるダッシュを単一のダッシュに置き換えます。

  5. 先頭と末尾の空白、ダッシュ、および下線を削除します。

例えば:

>>> slugify(' Joel is a slug ')
'joel-is-a-slug'

Unicode文字を許可する場合は、allow_unicode=Trueを渡します。 例えば:

>>> slugify('你好 World', allow_unicode=True)
'你好-world'

バージョン3.2で変更:古いバージョンでは、先頭と末尾のダッシュとアンダースコアは削除されません。


django.utils.timezone

utc
UTCを表すtzinfoインスタンス。
get_fixed_timezone(offset)

UTCからの固定オフセットを持つタイムゾーンを表すtzinfoインスタンスを返します。

offsetは、datetime.timedeltaまたは整数の分数です。 UTCの東のタイムゾーンには正の値を使用し、UTCの西には負の値を使用します。

get_default_timezone()
デフォルトのタイムゾーンを表すtzinfoインスタンスを返します。
get_default_timezone_name()
デフォルトのタイムゾーンの名前を返します。
get_current_timezone()
現在のタイムゾーンを表すtzinfoインスタンスを返します。
get_current_timezone_name()
現在のタイムゾーンの名前を返します。
activate(timezone)
現在のタイムゾーンを設定します。 timezone引数は、tzinfoサブクラスまたはタイムゾーン名のインスタンスである必要があります。
deactivate()
現在のタイムゾーンの設定を解除します。
override(timezone)

これは、現在のタイムゾーンactivate()で開始時に設定し、終了時に以前にアクティブだったタイムゾーンを復元するPythonコンテキストマネージャーです。 timezone引数がNoneの場合、現在のタイムゾーンは、エントリ時に deactivate()で設定解除されます。

overrideは関数デコレータとしても使用できます。

localtime(value=None, timezone=None)

認識しているdatetimeを別のタイムゾーン(デフォルトでは現在のタイムゾーン)に変換します。

valueを省略すると、デフォルトで now()になります。

この関数は、ナイーブな日時では機能しません。 代わりに make_aware()を使用してください。

localdate(value=None, timezone=None)

localtime()を使用して、認識しているdatetimeを別のタイムゾーン(デフォルトでは現在のタイムゾーン)のdate()に変換します。

valueを省略すると、デフォルトで now()になります。

この関数は、ナイーブな日時では機能しません。

now()
現在の時点を表すdatetimeを返します。 正確に返されるものは、:setting: `USE_TZ` :の値によって異なります。
  • :setting: `USE_TZ`Falseの場合、これはナイーブ日時になります(つまり、 システムのローカルタイムゾーンの現在の時刻を表す、関連付けられたタイムゾーンのない日時)。
  • :setting: `USE_TZ`Trueの場合、これはUTCで現在の時刻を表す認識日時になります。 now()は、:setting: `TIME_ZONE` ;の値に関係なく、常にUTCで時刻を返すことに注意してください。 localtime()を使用して、現在のタイムゾーンの時刻を取得できます。
is_aware(value)
valueが認識している場合はTrueを返し、ナイーブな場合はFalseを返します。 この関数は、valuedatetimeであることを前提としています。
is_naive(value)
valueがナイーブの場合はTrueを返し、認識している場合はFalseを返します。 この関数は、valuedatetimeであることを前提としています。
make_aware(value, timezone=None, is_dst=None)

timezonevalueと同じ時点を表す認識されたdatetimeを返します。valueはナイーブなdatetimeです。 timezoneNoneに設定されている場合、デフォルトで現在のタイムゾーンになります。

pytzを使用しているときに、同じ時間が2回発生するDST移行中にvalueを認識させようとすると、pytz.AmbiguousTimeError例外が発生します(DSTからの復帰時)。 is_dstTrueまたはFalseに設定すると、時刻がそれぞれ移行前か移行後かを選択することで例外を回避できます。

pytzを使用しているときに、DST移行中にvalueを認識させようとすると、pytz.NonExistentTimeError例外が発生します。 たとえば、DST移行中に2:00時間がスキップされた場合、そのタイムゾーンで2:30を認識させようとすると、例外が発生します。 これを回避するには、is_dstを使用して、make_aware()がそのような存在しない時間をどのように解釈するかを指定できます。 is_dst=Trueの場合、上記の時間は2:30 DST時間(現地時間1:30に相当)として解釈されます。 逆に、is_dst=Falseの場合、時刻は標準時の2:30(現地時間の3:30に相当)として解釈されます。

is_dstパラメータは、pytz以外のタイムゾーン実装を使用する場合は効果がありません。

make_naive(value, timezone=None)
timezonevalueと同じ時点を表すナイーブなdatetimeを返します。valuedatetimeを認識しています。 timezoneNoneに設定されている場合、デフォルトで現在のタイムゾーンになります。


django.utils.translation

以下の使用法の詳細については、翻訳ドキュメントを参照してください。

gettext(message)
messageを変換し、文字列として返します。
pgettext(context, message)

contextを指定して、messageを変換し、文字列として返します。

詳細については、コンテキストマーカーを参照してください。

gettext_lazy(message)
pgettext_lazy(context, message)

上記の非レイジーバージョンと同じですが、レイジー実行を使用します。

遅延翻訳ドキュメントを参照してください。

gettext_noop(message)
文字列を翻訳用にマークしますが、現在は翻訳していません。 これは、文字列をグローバル変数に格納するために使用できます。グローバル変数は、(外部で使用される可能性があるため)基本言語のままで、後で翻訳されます。
ngettext(singular, plural, number)
singularpluralを変換し、numberに基づいて適切な文字列を返します。
npgettext(context, singular, plural, number)
singularpluralを変換し、numbercontextに基づいて適切な文字列を返します。
ngettext_lazy(singular, plural, number)
npgettext_lazy(context, singular, plural, number)

上記の非レイジーバージョンと同じですが、レイジー実行を使用します。

遅延翻訳ドキュメントを参照してください。

activate(language)
指定された言語の翻訳オブジェクトをフェッチし、それを現在のスレッドの現在の翻訳オブジェクトとしてアクティブ化します。
deactivate()
現在アクティブなトランスレーションオブジェクトを非アクティブ化して、さらに_呼び出しがデフォルトのトランスレーションオブジェクトに対して解決されるようにします。
deactivate_all()
アクティブな変換オブジェクトをNullTranslations()インスタンスにします。 これは、何らかの理由で遅延翻訳を元の文字列として表示する場合に役立ちます。
override(language, deactivate=False)

django.utils.translation.activate()を使用して特定の言語の翻訳オブジェクトをフェッチし、それを現在のスレッドの翻訳オブジェクトとしてアクティブ化し、終了時に以前のアクティブな言語を再アクティブ化するPythonコンテキストマネージャー。 オプションで、deactivate引数がTrueの場合、 django.utils.translation.deactivate()を使用して終了時に一時的な変換を非アクティブ化できます。 言語引数としてNoneを渡すと、NullTranslations()インスタンスがコンテキスト内でアクティブ化されます。

overrideは関数デコレータとしても使用できます。

check_for_language(lang_code)
指定された言語コードのグローバル言語ファイルがあるかどうかを確認します(例: 'fr'、 'pt_BR')。 これは、ユーザー提供の言語が使用可能かどうかを判断するために使用されます。
get_language()
現在選択されている言語コードを返します。 翻訳が一時的に非アクティブ化された場合( deactivate_all()によって、またはNoneoverride()に渡された場合)、Noneを返します。
get_language_bidi()
選択した言語のBiDiレイアウトを返します。
  • False =左から右へのレイアウト
  • True =右から左へのレイアウト
get_language_from_request(request, check_path=False)

リクエストを分析して、ユーザーがシステムに表示させたい言語を見つけます。 settings.LANGUAGESにリストされている言語のみが考慮されます。 ユーザーがメイン言語のあるサブ言語をリクエストすると、メイン言語が送信されます。

check_pathTrueの場合、関数は最初に要求されたURLをチェックして、パスが:setting: `LANGUAGES` 設定にリストされている言語コードで始まっているかどうかを確認します。

get_supported_language_variant(lang_code, strict=False)

:setting: `LANGUAGES` 設定にある場合は、lang_codeを返し、より一般的なバリアントを選択する可能性があります。 たとえば、lang_code'es-ar'で、'es':setting: `LANGUAGES` にあるが、'es-ar'はそうではありません。

strictFalse(デフォルト)の場合、言語コードもその汎用バリアントも見つからない場合、国固有のバリアントが返されることがあります。 たとえば、'es-co'のみが:setting: `LANGUAGES` にある場合、'es''es-ar'などのlang_codeに対して返されます。 。 strict=Trueの場合、これらの一致は返されません。

何も見つからない場合はLookupErrorを上げます。

to_locale(language)
言語名(en-us)をロケール名(en_US)に変換します。
templatize(src)
Djangoテンプレートをxgettextが理解できるものに変えます。 これは、Django変換タグを標準のgettext関数呼び出しに変換することによって行われます。
LANGUAGE_SESSION_KEY

現在のセッションのアクティブな言語が保存されるセッションキー。

バージョン3.0以降非推奨:言語はDjango4.0のセッションに保存されません。 代わりに、:setting: `LANGUAGE_COOKIE_NAME` Cookieを使用してください。