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

django-slim的Python项目详细描述


django多语言模型的简单实现。django管理集成是开箱即用的。 支持django localeurl集成。

先决条件

  • Django 1.5、1.6、1.7
  • Python2.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. slim添加到设置模块的INSTALLED_APPS

用法和示例

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示例应用install.sh。

$ chmod +x django_slim_example_app_installer.sh

$ ./django_slim_example_app_installer.sh

到前端/后端测试应用程序。

现在让我们一步一步地回顾我们想象中的示例应用程序。

设置.py

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

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

添加语言。

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

示例/模型.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()

示例/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)

示例/视图.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集成

安装

Python2.6.*和2.7.*完全支持Django LocalEurl集成,并自动安装 安装django slim时。如果使用python 3,请安装django localeurl的分叉版本 (因为官方版本还不支持Python3)。

从Bitbucket派生的分叉版本:

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

集成

使用slim.models.decorators.auto_prepend_languagedecorator使其工作。

示例(记住我们的footem模型。

>>> 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@gmail.com>;

Bitdeli badge

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
空字符串检查在java中未按预期工作   JavaSpringWebClient:自动计算主体的HMAC签名并将其作为头传递   foreach是否有一个Java等效的foreach循环和一个引用变量?   java如何在Eclipse中导入jar   使用特定第三方或java时lombok触发错误。*方法或构造函数   安卓 java将对象数组转换为int数组   java使一定百分比的JUnit测试通过   java Android:将Seekbar的一个值与另一个值进行比较   java将int数组(图像数据)写入文件的最佳方式是什么   java取代了系统。yml的构造函数内的getProperty   sqlite Java将公钥和私钥转换为字符串,然后再转换回字符串   安卓获取白色像素并将其保存到java opencv中的数组中   java为什么是ServerSocket。setSocketFactory静态?   Java数组似乎在不直接修改的情况下更改值