Django Utils

本文档涵盖了django.utils中的所有稳定模块。django.utils中的大多数模块都是为内部使用而设计的,只有以下部分才能被视为稳定,因此按照internal release deprecation policy可向后兼容。

django.utils.cache

此模块包含用于控制缓存的辅助函数。它通过管理响应的Vary标头来实现。它包括直接修补响应对象的头部的函数和修改函数的修饰器来做自己的头部修补。

有关Vary头的信息,请参见第14.44节 RFC 2616

本质上,Vary HTTP头定义了缓存在构建缓存键时应考虑哪些头。对于在Vary中命名的头,具有相同路径但头部内容不同的请求需要获得不同的缓存键,以防止传送错误的内容。

例如,internationalization中间件需要通过Accept-language头区分缓存。

patch_cache_control(response, **kwargs)[source]

此函数通过向Cache-Control头中添加所有关键字参数来修补它。变换如下:

  • 所有关键字参数名称都转换为小写,下划线转换为连字符。
  • 如果参数的值为True(确切地为True,而不仅仅是一个真值),则只有参数名称会添加到标题中。
  • 在将str()应用到它之后,所有其他参数都与它们的值相加。
get_max_age(response)[source]

将响应Cache-Control标头中的max-age作为整数返回(如果找不到或不是整数,则返回None)。

patch_response_headers(response, cache_timeout=None)[source]

向给定的HttpResponse对象添加一些有用的标题:

  • ETag
  • Last-Modified
  • Expires
  • Cache-Control

每个标头仅在尚未设置时才添加。

cache_timeout以秒为单位。默认情况下使用CACHE_MIDDLEWARE_SECONDS设置。

add_never_cache_headers(response)[source]

向响应添加标头以指示不应缓存页面。

patch_vary_headers(response, newheaders)[source]

在给定的HttpResponse对象中添加(或更新)Vary标题。newheaders是应该在Vary中的标题名称列表。Vary中的现有标题不会被删除。

get_cache_key(request, key_prefix=None)[source]

根据请求路径返回缓存密钥。它可以在请求阶段使用,因为它从全局路径注册表中提取要考虑的头列表,并使用这些头文件构建缓存密钥以进行检查。

如果没有存储headerlist,则需要重新生成页面,因此此函数返回None

learn_cache_key(request, response, cache_timeout=None, key_prefix=None)[source]

了解响应对象的某些请求路径要考虑的标头。它将这些头文件存储在全局路径注册表中,以便以后对该路径的访问将知道需要考虑哪些头文件,而不构建响应对象本身。标头在响应的Vary标头中命名,但我们希望阻止响应生成。

用于生成缓存密钥的头的列表与页本身存储在同一个缓存中。如果缓存将一些数据从缓存中老化,这只是意味着我们必须构建响应一次以获得Vary头,因此在用于缓存键的头列表中。

django.utils.datastructures

class SortedDict[source]

自1.7版起已弃用: SortedDict已弃用,将在Django 1.9中移除。请改用collections.OrderedDict

django.utils.datastructures.SortedDict类是一个字典,按照它们的插入顺序保持其键。

Creating a new SortedDict

创建新SortedDict必须以保证排序的方式完成。例如:

SortedDict({'b': 1, 'a': 2, 'c': 3})

不管用。传入基本的Python dict可能会产生不可靠的结果。相反做:

SortedDict([('b', 1), ('a', 2), ('c', 3)])

django.utils.dateparse

此模块中定义的函数共享以下属性:

  • 如果他们的输入格式正确,但不是有效的日期或时间,则会产生ValueError
  • 如果格式不正确,则返回None
  • 它们在输入中接受高达picosecond的分辨率,但是它们截断到微秒级,因为这是Python支持的。
parse_date(value)[source]

解析字符串并返回datetime.date

parse_time(value)[source]

解析字符串并返回datetime.time

不支持UTC偏移;如果value描述一个,结果为None

parse_datetime(value)[source]

解析字符串并返回datetime.datetime

支持UTC偏移;如果value描述一个,则结果的tzinfo属性是FixedOffset实例。

parse_duration(value)[source]
Django 1.8中的新功能。

解析字符串并返回datetime.timedelta

预期采用格式“DD HH:MM:SS.uuuuu”或ISO 8601规定的数据P4DT1H15M20S其等效于4 1:15:20)。

django.utils.decorators

method_decorator(decorator)[source]

将函数装饰器转换为方法装饰器。有关示例用法,请参见decorating class based views

decorator_from_middleware(middleware_class)[source]

给定一个中间件类,返回一个视图装饰器。这使您可以在每个视图的基础上使用中间件功能。中间件创建时没有传递参数。

decorator_from_middleware_with_args(middleware_class)[source]

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

python_2_unicode_compatible()[source]

在Python 2下定义__unicode____str__方法的装饰器。在Python 3下它什么也不做。

要使用单个代码库支持Python 2和3,请定义返回文本的__str__方法,并将此装饰器应用于类。

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

返回代表Python 3上的s - unicode和Python 3上的str的文本对象。使用encoding编码解码器处理。

如果strings_onlyTrue,请勿转换(一些)非字符串对象。

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

smart_text()的历史名称。仅在Python 2下可用。

is_protected_type(obj)[source]

确定对象实例是否为受保护类型。

受保护类型的对象在传递到force_text(strings_only=True)时保留为原样。

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

类似于smart_text,除了延迟实例被解析为字符串,而不是保持为延迟对象。

如果strings_onlyTrue,请勿转换(一些)非字符串对象。

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

force_text()的历史名称。仅在Python 2下可用。

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

返回encoding中指定的s的按测试版本。

如果strings_onlyTrue,请勿转换(一些)非字符串对象。

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

类似于smart_bytes,除了延迟实例被解析为bytestrings,而不是保持为延迟对象。

如果strings_onlyTrue,请勿转换(一些)非字符串对象。

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

Python 2上的smart_bytes()的别名和Python 3上的smart_text()此函数返回str或惰性字符串。

例如,这适合于在Python 2和3上写入sys.stdout

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

Python 2上的force_bytes()的别名和在Python 3上的force_text()此函数始终返回str

iri_to_uri(iri)[source]

将国际化资源标识符(IRI)部分转换为适合包含在URL中的URI部分。

这是 RFC 3987第3.1节的算法。然而,由于我们假设输入是UTF-8或unicode已经,我们可以简化东西一点从完整的方法。

采用UTF-8字节的IRI,并返回包含编码结果的ASCII字节。

uri_to_iri(uri)[source]
Django 1.8中的新功能。

将统一资源标识符转换为国际化资源标识符。

这是 RFC 3987第3.2节中的算法。

获取ASCII字节的URI,并返回包含编码结果的Unicode字符串。

filepath_to_uri(path)[source]

将文件系统路径转换为适合包含在URL中的URI部分。路径假定为UTF-8或unicode。

此方法将对通常被识别为URI的特殊字符的某些字符进行编码。请注意,此方法不会对'字符进行编码,因为它是URI中的有效字符。有关详细信息,请参阅encodeURIComponent() JavaScript函数。

返回包含编码结果的ASCII字符串。

escape_uri_path(path)[source]
Django 1.8中的新功能。

从统一资源标识符(URI)的路径部分转义不安全字符。

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')

为了简化发电机的选择,使用feedgenerator.DefaultFeed,目前为Rss201rev2Feed

有关不同版本RSS的定义,请参阅:http://web.archive.org/web/20110718035220/http://diveintomark.org/archives/2004/02/04/incompatible-rss t0 >

get_tag_uri(url, date)[source]

创建一个TagURI。

请参阅http://web.archive.org/web/20110514113830/http://diveintomark.org/archives/2004/05/28/howto-atom-id

SyndicationFeed

class SyndicationFeed[source]

所有联合供稿的基类。子类应提供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])[source]

使用给定的元数据字典初始化Feed,该元数据字典应用于整个Feed。

任何传递到__init__的额外关键字参数将存储在self.feed中。

所有参数都应该是Unicode对象,除了categories,它应该是Unicode对象序列。

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

向Feed中添加项目。除了pubdateupdateddate,它们是datetime.datetime对象,所有参数都应该是Python unicode enclosure,它是Enclosure类的一个实例。

Django 1.7中的新功能:

已添加可选的updateddate参数。

num_items()[source]
root_attributes()[source]

返回额外的属性放置在根(即馈送/通道)元件。write()

add_root_elements(handler)[source]

在根中添加元素。馈送/通道)元件。write()

item_attributes(item)[source]

返回每个项目上放置的额外属性。项目/条目)元素。

add_item_elements(handler, item)[source]

在每个项目上添加元素(即项目/条目)元素。

write(outfile, encoding)[source]

将给定编码中的Feed输出到outfile,这是一个类似于文件的对象。子类应该覆盖此。

writeString(encoding)[source]

以字符串形式返回给定编码中的Feed。

latest_post_date()[source]

返回Feed中所有项目的最新pubdateupdateddate如果没有项目具有这些属性,则返回当前日期/时间。

Enclosure

class Enclosure[source]

表示RSS机箱

RssFeed

class RssFeed(SyndicationFeed)[source]

Rss201rev2Feed

class Rss201rev2Feed(RssFeed)[source]

规格:http://cyber.law.harvard.edu/rss/rss.html

RssUserland091Feed

class RssUserland091Feed(RssFeed)[source]

规格:http://backend.userland.com/rss091

Atom1Feed

class Atom1Feed(SyndicationFeed)[source]

规格:http://tools.ietf.org/html/rfc4287

django.utils.functional

class cached_property(object, name)[source]

@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()将被调用两次。由于视图和模板中的实例person是相同的,因此@cached_property可以避免:

from django.utils.functional import cached_property

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

注意,由于方法现在是一个属性,在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可以确保属性的值在实例的整个生命周期内不会意外更改。这可能发生在一个方法的计算是基于datetime.now(),或者简单地如果一个更改被保存到数据库的一些其他进程在一个方法的后续调用之间的短暂的时间间隔同一个实例。

Django 1.8中的新功能。

您可以使用name参数来创建其他方法的缓存属性。例如,如果你有一个昂贵的get_friends()方法,并希望允许调用它而不检索缓存的值,你可以写:

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

虽然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
allow_lazy(func, *resultclasses)[source]

Django提供了许多效用函数(特别是在django.utils),它们接受一个字符串作为它们的第一个参数,并对该字符串进行操作。这些函数由模板过滤器使用,也可以直接在其他代码中使用。

如果你写自己的类似的功能和处理翻译,你会面临的问题,当第一个参数是一个延迟翻译对象做什么。您不想立即将其转换为字符串,因为您可能在视图之外使用此函数(因此当前线程的语言环境设置将不正确)。

对于这种情况,使用django.utils.functional.allow_lazy()装饰器。它修改函数,使得if使用延迟转换作为其参数之一调用,函数求值将被延迟,直到需要将其转换为字符串。

例如:

from django.utils.functional import allow_lazy

def fancy_utility_function(s, ...):
    # Do some conversion on string 's'
    ...
# Replace unicode by str on Python 3
fancy_utility_function = allow_lazy(fancy_utility_function, unicode)

除了要装饰的函数之外,allow_lazy()装饰器还需要一些额外的参数(*args),指定原始函数可以返回的类型。通常,在这里包含unicode(或str)就足够了,并且确保函数只返回Unicode字符串。

使用这个装饰器意味着你可以编写你的函数,并假设输入是一个合适的字符串,然后在末尾添加对延迟翻译对象的支持。

django.utils.html

通常,您应该使用Django的模板来构建HTML,以使用其自动缩放机制,并在适当的位置使用django.utils.safestring中的实用程序。此模块提供一些额外的低级实用程序用于转义HTML。

escape(text)[source]

返回给定文本,并带有用于HTML的带符号,引号和尖括号。输入首先通过force_text(),输出具有mark_safe()

conditional_escape(text)[source]

类似于escape(),除了它不对预先转义的字符串操作,因此它不会双重转义。

format_html(format_string, *args, **kwargs)[source]

这类似于str.format,除了它适合构建HTML片段。在传递给str.format之前,所有args和kwarg都通过conditional_escape()传递。

对于构建小HTML片段的情况,此函数优先于使用%str.format的字符串插值,因为它将转义应用于所有参数如Template系统默认应用转义。

所以,而不是写:

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_text()

format_html_join(sep, format_string, args_generator)[source]

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)[source]

尝试从字符串中删除任何看起来像HTML标记的内容,即<>中包含的任何内容。

绝对不保证结果字符串是HTML安全。因此,请不要将strip_tag调用的结果标记为安全,而不首先转义它,例如使用escape()

例如:

strip_tags(value)

If value is "<b>Joel</b> <button>is</button> a <span>slug</span>" the return value will be "Joel is a slug".

如果您正在寻找更强大的解决方案,请查看bleach Python库。

remove_tags(value, tags)[source]

自版本1.8后已弃用: remove_tags()无法保证HTML安全输出,并且由于安全问题而被弃用。请考虑使用漂白

从输出中删除[X] HTML标记名称的空格分隔列表。

绝对不保证结果字符串是HTML安全。特别地,它不递归地工作,所以输出remove_tags(“&lt; sc&lt; script&gt; ript&gt; alert('XSS')&lt; / sc&lt; / script&gt; / t1> “script”)不会删除“嵌套”脚本标记。因此,如果value是不可信的,则不要先对remove_tags()调用的结果标记安全,例如使用escape()

例如:

remove_tags(value, "b span")

If value is "<b>Joel</b> <button>is</button> a <span>slug</span>" the return value will be "Joel <button>is</button> a slug".

请注意,此过滤器区分大小写。

If value is "<B>Joel</B> <button>is</button> a <span>slug</span>" the return value will be "<B>Joel</B> <button>is</button> a slug".

html_safe()[source]
Django 1.8中的新功能。

类上的__html__()方法可帮助非Django模板检测其输出不需要HTML转义的类。

This decorator defines the __html__() method on the decorated class by wrapping the __unicode__() (Python 2) or __str__() (Python 3) in mark_safe(). 确保__unicode__()__str__()方法确实返回不需要HTML转义的文本。

django.utils.http

urlquote(url, safe='/')[source]

Python的urllib.quote()函数,可以对unicode字符串进行操作。url在引用前首先进行UTF-8编码。返回的字符串可以安全地用作后续iri_to_uri()调用的参数的一部分,而不会发生双引号。实现延迟执行。

urlquote_plus(url, safe='')[source]

Python的urllib.quote_plus()函数的版本,可以对unicode字符串进行操作。url在引用前首先进行UTF-8编码。返回的字符串可以安全地用作后续iri_to_uri()调用的参数的一部分,而不会发生双引号。实现延迟执行。

urlencode(query, doseq=0)[source]

Python的urllib.urlencode()函数的版本,可以对unicode字符串进行操作。参数首先转换为UTF-8编码字符串,然后按照正常编码。

cookie_date(epoch_seconds=None)[source]

格式化时间以确保与Netscape的Cookie标准兼容。

接受以UTC表示的纪元以秒表示的浮点数,例如由time.time()输出的浮点数。如果设置为None,则默认为当前时间。

输出格式为Wdy, DD-Mon-YYYY HH:MM:SS GMT

http_date(epoch_seconds=None)[source]

格式化与HTTP RFC 2616部分3.3.1中指定的 RFC 1123日期格式匹配的时间。

接受以UTC表示的纪元以秒表示的浮点数,例如由time.time()输出的浮点数。如果设置为None,则默认为当前时间。

输出格式为Wdy, DD Mon YYYY GMT

base36_to_int(s)[source]

将36个基本字符串转换为整数。在Python 2上,输出保证为int而不是long

int_to_base36(i)[source]

将正整数转换为基本36个字符串。在Python 2 i必须小于sys.maxint

urlsafe_base64_encode(s)[source]

在base64中编码用于URL的bytestring,剥离任何尾随的等号。

urlsafe_base64_decode(s)[source]

解码base64编码字符串,添加可能已被删除的任何尾部等号。

django.utils.module_loading

使用Python模块的函数。

import_string(dotted_path)[source]
Django 1.7中的新功能。

导入虚线模块路径并返回路径中由姓氏指定的属性/类。如果导入失败,则引发ImportError例如:

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

等效于:

from django.core.exceptions import ValidationError
import_by_path(dotted_path, error_prefix='')[source]

自1.7版起已弃用:改用import_string()

导入虚线模块路径并返回路径中由姓氏指定的属性/类。如果出现问题,则提升ImproperlyConfigured

django.utils.safestring

使用“安全字符串”的函数和类:可以安全显示而无需在HTML中进一​​步转义的字符串。将某个标记为“安全字符串”意味着字符串的生成器已经转换了不应该由HTML引擎解释的字符(例如,''

class SafeBytes[source]

用于HTML输出目的的已被特别标记为“安全”(不需要进一步转义)的bytes子类。

class SafeString

已为HTML输出目的特别标记为“安全”(不需要进一步转义)的str子类。这是Python 2上的SafeBytes和Python 3上的SafeText

class SafeText[source]

对于HTML输出目的,已经特别标记为“安全”的str(在Python 3中)或unicode

class SafeUnicode

SafeText的历史名称。仅在Python 2下可用。

mark_safe(s)[source]

将字符串明确标记为(HTML)输出目的的安全。返回的对象可以在任何地方使用字符串或unicode对象是适当的。

可以在单个字符串上调用多次。

对于构建HTML的片段,通常应使用django.utils.html.format_html()

标记为安全的字符串将变得不安全,如果修改。例如:

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

>>> mystr = mystr.strip()  # removing whitespace
>>> type(mystr)
<type 'str'>
mark_for_escaping(s)[source]

在输出时将字符串明确标记为需要HTML转义。SafeData子类没有影响。

可以在单个字符串上调用多次(生成的转义仅应用一次)。

django.utils.text

slugify()[source]

转换为ASCII。将空格转换为连字符。删除不是字母数字,下划线或连字符的字符。转换为小写。还剥离前导和尾随空格。

例如:

slugify(value)

如果value“Joel a >,输出将为"joel-is-a-slug"

django.utils.timezone

utc

表示UTC的tzinfo实例。

class FixedOffset(offset=None, name=None)[source]
Django 1.7中的新功能。

tzinfo的子类,建模与UTC的固定偏移。offset是一个表示UTC以东分钟数的整数。

get_fixed_timezone(offset)[source]
Django 1.7中的新功能。

返回一个tzinfo实例,该实例表示与UTC具有固定偏移量的时区。

offset是一个datetime.timedelta实例或一个表示分钟的整数。UTC以东的时区使用正值,UTC以西的时区使用负值。

get_default_timezone()[source]

返回表示default time zonetzinfo实例。

get_default_timezone_name()[source]

返回default time zone的名称。

get_current_timezone()[source]

返回表示current time zonetzinfo实例。

get_current_timezone_name()[source]

返回current time zone的名称。

activate(timezone)[source]

设置current time zonetimezone参数必须是tzinfo子类的实例,或者如果pytz可用,则是时区名称。

deactivate()[source]

取消设置current time zone

override(timezone)[source]

This is a Python context manager that sets the current time zone on entry with activate(), and restores the previously active time zone on exit. 如果timezone参数为None,则current time zone在输入时取消设置,而改为使用deactivate()

在Django 1.8中更改:

override现在可用作函数装饰器。

localtime(value, timezone=None)[source]

将感知到的datetime转换为不同的时区,默认为current time zone

此功能在天真的数据时间不工作;请改用make_aware()

now()[source]

返回表示当前时间点的datetime返回的具体内容取决于USE_TZ的值:

  • 如果USE_TZFalse,则它将是naive的datetime(即没有相关时区的datetime),它表示系统本地时区的当前时间。
  • 如果USE_TZTrue,则这将是表示UTC当前时间的aware datetime。请注意,now()将始终以UTC返回时间,无论TIME_ZONE的值如何;您可以使用localtime()转换为当前时区的时间。
is_aware(value)[source]

如果value知道,则返回True,如果它是幼稚的,则返回False此函数假定valuedatetime

is_naive(value)[source]

如果value是初始的,则返回True,如果知道,则返回False此函数假定valuedatetime

make_aware(value, timezone=None)[source]

Returns an aware datetime that represents the same point in time as value in timezone, value being a naive datetime. 如果timezone设置为None,则默认为current time zone

如果value不存在或由于DST转换而不明确,则此函数可能会引发异常。

在Django 1.8中更改:

在旧版本的Django中,timezone是必需的参数。

make_naive(value, timezone=None)[source]

Returns an naive datetime that represents in timezone the same point in time as value, value being an aware datetime.如果timezone设置为None,则默认为current time zone

在Django 1.8中更改:

在旧版本的Django中,timezone是必需的参数。

django.utils.translation

有关以下用法的完整讨论,请参阅translation documentation

gettext(message)[source]

翻译message并以UTF-8字节形式返回

ugettext(message)[source]

翻译message并以unicode字符串返回

pgettext(context, message)[source]

转换message给定context并返回一个unicode字符串。

有关详细信息,请参阅Contextual markers

gettext_lazy(message)
ugettext_lazy(message)
pgettext_lazy(context, message)

与上面的非惰性版本相同,但使用惰性执行。

请参阅lazy translations documentation

gettext_noop(message)[source]
ugettext_noop(message)

标记要翻译的字符串,但不会立即翻译。这可以用于将字符串存储在应该保持基本语言的全局变量中(因为它们可能在外部使用),并且稍后将被翻译。

ngettext(singular, plural, number)[source]

翻译singularplural,并在UTF-8字节中返回基于number的适当字符串。

ungettext(singular, plural, number)[source]

翻译singularplural,并在unicode字符串中返回基于number的适当字符串。

npgettext(context, singular, plural, number)[source]

翻译singularplural,并在unicode字符串中返回基于numbercontext的适当字符串。

ngettext_lazy(singular, plural, number)[source]
ungettext_lazy(singular, plural, number)[source]
npgettext_lazy(context, singular, plural, number)[source]

与上面的非惰性版本相同,但使用惰性执行。

请参阅lazy translations documentation

string_concat(*strings)

字符串连接的延迟变体,需要从多个部分构建的翻译。

activate(language)[source]

获取给定语言的翻译对象,并将其激活为当前线程的当前翻译对象。

deactivate()[source]

停用当前活动的翻译对象,以便进一步的_调用将再次根据默认翻译对象解析。

deactivate_all()[source]

使主动翻译对象a NullTranslations()实例。当我们希望延迟翻译由于某种原因显示为原始字符串时,这很有用。

override(language, deactivate=False)[source]

使用django.utils.translation.activate()来获取给定语言的翻译对象的Python上下文管理器将其作为当前线程的翻译对象激活,并在退出时重新激活上一个活动语言。或者,如果deactivate参数为True,则可以使用django.utils.translation.deactivate()退出退出临时转换。如果传递None作为语言参数,则在上下文中激活NullTranslations()实例。

在Django 1.8中更改:

override现在可用作函数装饰器。

get_language()[source]

返回当前选择的语言代码。如果暂时停用翻译(通过deactivate_all()或将None传递给override()),则返回None

在Django 1.8中更改:

在Django 1.8之前,停用翻译时,get_language()总是返回LANGUAGE_CODE

get_language_bidi()[source]

返回所选语言的BiDi布局:

  • False =从左到右的布局
  • True =从右到左的布局
get_language_from_request(request, check_path=False)[source]

分析请求以找到用户希望系统显示哪种语言。仅考虑在settings.LANGUAGES中列出的语言。如果用户请求一个具有主语言的子语言,我们发出主语言。

如果check_pathTrue,则函数首先检查所请求的URL,以确定其路径是否以LANGUAGES设置中列出的语言代码开头。

to_locale(language)[source]

将语言名称(en-us)转换为语言环境名称(en_US)。

templatize(src)[source]

将Django模板变成xgettext可以理解的内容。它通过将Django翻译标签转换为标准的gettext函数调用来实现。

LANGUAGE_SESSION_KEY

存储当前会话的活动语言的会话密钥。

django.utils.tzinfo

自1.7版起已弃用:改用timezone

class FixedOffset[source]

固定偏移距离UTC的东部。

自1.7版起已弃用:改用get_fixed_timezone()

class LocalTimezone[source]

来自时间模块的代理时区信息。

自1.7版起已弃用:改用get_default_timezone()