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()
を適用した後、それらの値とともに追加されます。
- 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
ヘッダーを応答に追加して、ページをキャッシュしてはならないことを示します。バージョン3.0で変更:
private
ディレクティブが追加されました。
- patch_vary_headers(response, newheaders)
指定された
HttpResponse
オブジェクトにVary
ヘッダーを追加(または更新)します。newheaders
は、Vary
に含める必要のあるヘッダー名のリストです。 ヘッダーにアスタリスクが含まれている場合、Vary
ヘッダーは単一のアスタリスク'*'
で構成されます。 それ以外の場合、Vary
の既存のヘッダーは削除されません。バージョン3.0での変更: RFC 7231#section-7.1.4 に従ったアスタリスク
'*'
の処理が追加されました。
- 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
になります。
- parse_datetime(value)
文字列を解析し、
datetime.datetime
を返します。UTCオフセットがサポートされています。
value
が1つを表す場合、結果のtzinfo
属性はdatetime.timezone
インスタンスです。バージョン2.2で変更:古いバージョンでは、
tzinfo
属性は FixedOffset インスタンスです。
- parse_duration(value)
文字列を解析し、
datetime.timedelta
を返します。"DD HH:MM:SS.uuuuuu"
の形式、またはISO 8601で指定されている形式のデータが必要です(例:P4DT1H15M20S
は、4 1:15:20
と同等です)またはPostgreSQLの日中間隔形式(例:3 days 04:05:06
)。
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
django.utils.encoding
- smart_str(s, encoding='utf-8', strings_only=False, errors='strict')
任意のオブジェクト
s
を表すstr
オブジェクトを返します。encoding
コーデックを使用してバイト文字列を処理します。strings_only
がTrue
の場合、(一部の)文字列に似ていないオブジェクトを変換しないでください。
- is_protected_type(obj)
オブジェクトインスタンスが保護されたタイプであるかどうかを判別します。
保護されたタイプのオブジェクトは、
force_str(strings_only=True)
に渡されたときにそのまま保持されます。
- force_str(s, encoding='utf-8', strings_only=False, errors='strict')
smart_str()
と似ていますが、レイジーインスタンスがレイジーオブジェクトとして保持されるのではなく、文字列に解決される点が異なります。strings_only
がTrue
の場合、(一部の)文字列に似ていないオブジェクトを変換しないでください。
- smart_bytes(s, encoding='utf-8', strings_only=False, errors='strict')
encoding
で指定されているようにエンコードされた、任意のオブジェクトs
のバイト文字列バージョンを返します。strings_only
がTrue
の場合、(一部の)文字列に似ていないオブジェクトを変換しないでください。
- force_bytes(s, encoding='utf-8', strings_only=False, errors='strict')
smart_bytes
と似ていますが、レイジーインスタンスがレイジーオブジェクトとして保持されるのではなく、バイト文字列に解決される点が異なります。strings_only
がTrue
の場合、(一部の)文字列に似ていないオブジェクトを変換しないでください。
- 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バイトまたは文字列のいずれかであると想定されます。
このメソッドは、通常URIの特殊文字として認識される特定の文字をエンコードします。 このメソッドは、URI内で有効な文字であるため、 '文字をエンコードしないことに注意してください。 詳細については、
encodeURIComponent()
JavaScript関数を参照してください。エンコードされた結果を含むASCII文字列を返します。
- 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を作成します。
Enclosure
- class Enclosure
- RSSエンクロージャを表します
RssFeed
- class RssFeed(SyndicationFeed)
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_property
でdel
(またはdelattr
)を使用すると、 [が発生します。 X142X]。@cached_property
は、潜在的なパフォーマンス上の利点を提供するだけでなく、インスタンスの存続期間中に属性の値が予期せず変更されないようにすることができます。 これは、計算がdatetime.now()
に基づいているメソッドで発生する可能性があります。または、同じインスタンスでのメソッドの後続の呼び出しの短い間隔で、他のプロセスによって変更がデータベースに保存された場合に発生する可能性があります。メソッドのキャッシュされたプロパティを作成できます。 たとえば、高価な
get_friends()
メソッドがあり、キャッシュされた値を取得せずに呼び出すことを許可したい場合は、次のように記述できます。friends = cached_property(get_friends, name='friends')
必要なのは
name
Python <3.6サポートの引数。バージョン2.2で変更:古いバージョンのDjangoでは、すべてのバージョンのPythonで
name
引数が必要です。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
- 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()が適用されます。
バージョン3.0での変更:古いバージョンでは、
'
は同等の16進コード'
ではなく10進コード'
に変換されます。
- 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
を使用して結合する必要がある引数のグループの一般的なケース。sep
も conditional_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文字列にエンコードし、末尾の等号を削除します。
バージョン2.2で変更:古いバージョンでは、文字列ではなくバイト文字列を返します。
- urlsafe_base64_decode(s)
base64でエンコードされた文字列をデコードし、削除された可能性のある末尾の等号を追加します。
バージョン2.2で変更:古いバージョンでは、
s
がバイト文字列である可能性があります。
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_string
、args
、および/または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スラッグに変換します。
allow_unicode
がFalse
(デフォルト)の場合、ASCIIに変換します。英数字、アンダースコア、ハイフン、または空白以外の文字を削除します。
先頭と末尾の空白を削除します。
小文字に変換します。
空白または繰り返されるダッシュを単一のダッシュに置き換えます。
例えば:
>>> slugify(' Joel is a slug ') 'joel-is-a-slug'
Unicode文字を許可する場合は、
allow_unicode=True
を渡します。 例えば:>>> slugify('你好 World', allow_unicode=True) '你好-world'
django.utils.timezone
- utc
- UTCを表す
tzinfo
インスタンス。
- class FixedOffset(offset=None, name=None)
UTCからの固定オフセットをモデル化する
tzinfo
サブクラス。offset
は、UTCの東の整数分です。バージョン2.2以降非推奨:代わりに
datetime.timezone
を使用してください。
- 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()を使用して、現在のタイムゾーンの時刻を取得できます。
- :setting: `USE_TZ` が
- is_aware(value)
value
が認識している場合はTrue
を返し、ナイーブな場合はFalse
を返します。 この関数は、value
がdatetime
であることを前提としています。
- is_naive(value)
value
がナイーブの場合はTrue
を返し、認識している場合はFalse
を返します。 この関数は、value
がdatetime
であることを前提としています。
- make_aware(value, timezone=None, is_dst=None)
timezone
のvalue
と同じ時点を表す認識されたdatetime
を返します。value
はナイーブなdatetime
です。timezone
がNone
に設定されている場合、デフォルトで現在のタイムゾーンになります。pytz.AmbiguousTimeError
例外は、同じ時間が2回発生するDST移行中にvalue
を認識させようとすると発生します(DSTからの復帰時)。is_dst
をTrue
またはFalse
に設定すると、時刻がそれぞれ移行前か移行後かを選択することで例外を回避できます。pytz.NonExistentTimeError
例外は、時間が発生しないようにDST移行中にvalue
を認識させようとすると発生します。 たとえば、DST移行中に2:00時間がスキップされた場合、そのタイムゾーンで2:30を認識させようとすると、例外が発生します。 これを回避するには、is_dst
を使用して、make_aware()
がそのような存在しない時間をどのように解釈するかを指定できます。is_dst=True
の場合、上記の時間は2:30 DST時間(現地時間1:30に相当)として解釈されます。 逆に、is_dst=False
の場合、時刻は標準時の2:30(現地時間の3:30に相当)として解釈されます。
- make_naive(value, timezone=None)
timezone
でvalue
と同じ時点を表すナイーブなdatetime
を返します。value
はdatetime
を認識しています。timezone
がNone
に設定されている場合、デフォルトで現在のタイムゾーンになります。
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)
singular
とplural
を変換し、number
に基づいて適切な文字列を返します。
- npgettext(context, singular, plural, number)
singular
とplural
を変換し、number
とcontext
に基づいて適切な文字列を返します。
- 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()によって、または
None
が override()に渡された場合)、None
を返します。
- get_language_bidi()
- 選択した言語のBiDiレイアウトを返します。
False
=左から右へのレイアウトTrue
=右から左へのレイアウト
- get_language_from_request(request, check_path=False)
リクエストを分析して、ユーザーがシステムに表示させたい言語を見つけます。 settings.LANGUAGESにリストされている言語のみが考慮されます。 ユーザーがメイン言語のあるサブ言語をリクエストすると、メイン言語が送信されます。
check_path
がTrue
の場合、関数は最初に要求されたURLをチェックして、パスが:setting: `LANGUAGES` 設定にリストされている言語コードで始まっているかどうかを確認します。
- get_supported_language_variant(lang_code, strict=False)
:setting: `LANGUAGES` 設定にある場合は、
lang_code
を返し、より一般的なバリアントを選択する可能性があります。 たとえば、lang_code
が'es-ar'
で、'es'
が:setting: `LANGUAGES` にあるが、'es-ar'
はそうではありません。strict
がFalse
(デフォルト)の場合、言語コードもその汎用バリアントも見つからない場合、国固有のバリアントが返されることがあります。 たとえば、'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を使用してください。