跳转到主要内容

Django的多语言模型简单实现。

项目描述

Django的多语言模型简单实现。Django-admin集成无需额外配置。支持与django-localeurl集成。

先决条件

  • Django 1.5, 1.6, 1.7

  • Python 2.7.+, 3.3.+

安装

注意,需要Django 1.5。不支持早期版本。

  1. 安装

PyPI上的最新稳定版本

$ pip install django-slim

bitbucket上的最新稳定版本

$ pip install -e hg+https://bitbucket.org/barseghyanartur/django-slim@stable#egg=django-slim

github上的最新稳定版本

$ pip install -e git+https://github.com/barseghyanartur/django-slim/@stable#egg=django-slim

  1. INSTALLED_APPS中的slim添加到您的设置模块。

使用和示例

一个详细的示例项目可在https://github.com/barseghyanartur/django-slim/tree/stable/example目录中找到。

在PythonHosted上的文档中有截图(http://pythonhosted.org/django-slim/#screenshots)。

演示

为了能够快速评估django-slim,创建了一个演示应用(附带快速安装程序)(仅限Debian)。按照以下说明,在不到一分钟内运行演示应用。

获取最新的 django_slim_example_app_installer.sh

$ wget https://raw.github.com/barseghyanartur/django-slim/stable/example/django_slim_example_app_installer.sh

创建一个新的虚拟环境或切换到现有的虚拟环境,为安装程序赋予执行权限,并运行 django-slim-example-app-install.sh

$ chmod +x django_slim_example_app_installer.sh

$ ./django_slim_example_app_installer.sh

前往前端/后端并测试应用。

现在,让我们一步一步地审查我们的虚拟示例应用。

settings.py

slim 添加到已安装的应用中。

>>> INSTALLED_APPS = (
>>>     # ...
>>>     'slim',
>>>     # ...
>>> )

添加语言。

>>> LANGUAGES = (
>>>     ('en', gettext("English")), # Main language!
>>>     ('hy', gettext("Armenian")),
>>>     ('nl', gettext("Dutch")),
>>>     ('ru', gettext("Russian")),
>>> )

example/models.py

>>> from django.db import models
>>>
>>> from slim import LanguageField, Slim
>>>
>>> class FooItem(models.Model, Slim):
>>>     title = models.CharField(_("Title"), max_length=100)
>>>     slug = models.SlugField(unique=True, verbose_name=_("Slug"))
>>>     body = models.TextField(_("Body"))
>>>     language = LanguageField()

example/admin.py

>>> from django.contrib import admin
>>>
>>> from slim.admin import SlimAdmin
>>>
>>> class FooItemAdmin(SlimAdmin):
>>>     list_display = ('title',)
>>>     fieldsets = (
>>>         (None, {
>>>             'fields': ('title', 'slug', 'body')
>>>         }),
>>>     )
>>>
>>> admin.site.register(FooItem, FooItemAdmin)

example/views.py

我们假设语言代码保存在请求对象中(建议使用 django-localeurl 行为)。

>>> from slim import get_language_from_request
>>>
>>> from example.models import FooItem
>>>
>>> def browse(request, template_name='foo/browse.html'):
>>>     language = get_language_from_request(request)
>>>     queryset = FooItem._default_manager.filter(language=language)
>>>
>>>     # The rest of the code

更多关于ORM过滤的信息

>>> from example.models import FooItem
>>> foo = FooItem._default_manager.all()[0]
<FooItem: Lorem ipsum>

假设我们有一个这样的记录,并且它已经被翻译成亚美尼亚语(hy)和荷兰语(nl)。原始翻译名为 Lorem ipsum。其他翻译会将语言代码附加到标题上。

>>> armenian_foo = foo.get_translation_for('hy')
<FooItem: Lorem ipsum HY>
>>> dutch_foo = foo.get_translation_for('nl')
<FooItem: Lorem ipsum NL>

如果我们有一个翻译的对象,我们总是可以获取主翻译。

>>> armenian_foo.original_translation == foo
True

foo的所有可用翻译

>>> foo.available_translations()
[<FooItem: Lorem ipsum HY>, <FooItem: Lorem ipsum NL>]

亚美尼亚语foo的所有可用翻译。

>>> armenian_foo.available_translations()
[<FooItem: Lorem ipsum>, <FooItem: Lorem ipsum NL>]

有关工作示例,请参阅https://github.com/barseghyanartur/django-slim/tree/stable/example 目录。

django-localeurl集成

安装

django-localeurl集成在Python 2.6.*和2.7.*中得到完全支持,并在安装django-slim时自动安装。如果您使用Python 3,请安装django-localeurl的分支版本(因为官方版本尚不支持Python 3)。

来自bitbucket的分支版本

$ pip install -e hg+https://bitbucket.org/barseghyanartur/django-localeurl@stable#egg=localeurl

集成

使用 slim.models.decorators.auto_prepend_language 装饰器以便它能够工作。

示例(考虑我们的 FooItem 模型。

>>> from django.core.urlresolvers import reverse
>>>
>>> from slim.models.decorators import auto_prepend_language
>>>
>>> class FooItem(models.Model):
>>>     # Some other code; have in mind previous pieces.
>>>     @auto_prepend_language
>>>     def get_absolute_url(self):
>>>         kwargs = {'slug': self.slug}
>>>         return reverse('foo.detail', kwargs=kwargs)

不要忘记将 LocaleURLMiddleware 添加到 MIDDLEWARE_CLASSES(作为第一个)。

>>> MIDDLEWARE_CLASSES = (
>>>     'localeurl.middleware.LocaleURLMiddleware',
>>>     # The rest...
>>> )

同时,将 localeurl 添加到 INSTALLED_APPS

>>> INSTALLED_APPS = (
>>>     # Some apps...
>>>     'localeurl',
>>>     # Some more apps...
>>> )

许可证

GPL 2.0/LGPL 2.1

支持

有关任何问题,请联系作者部分提供的电子邮件。

作者

Artur Barseghyan <artur.barseghyan@gmail.com>

Bitdeli badge

项目详情


下载文件

下载您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

django-slim-0.7.5.tar.gz (14.5 kB 查看哈希)

上传时间

由以下机构支持