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素数校正(2个数组)   java是否可以将ArrayList除以一个double并创建一个新列表?   列出Java类Java的消息体编写器。util。ArrayList   Java将管道分隔文本\csv文件转换为XML   JAVA木卫一。IOException:读取Transferncode时EOF过早:分块http响应   java Volatile变量的读写   java错误:类型不匹配:无法从ArrayList<Subchild>转换为ArrayList<String>   java:无法向AsyncLoadingCache提供CacheWriter   java多级listview Android Studio   静态Java哈希映射性能   循环如何在JAVA中创建三角形   java在春季为ContextFactoryBean定义多个contextPath路由   java从服务器的URL下载数据,并将其保存在一个私有的安全文件夹中   JavaSpringJPA查询   objective c Java REST服务二进制下载   使用JavaSpringRESTAPI并将记录插入mysql表   java你会选择一个算法的速度而不是它对内存的有效使用吗?   java通过多个字段比较对象,如何添加一个方法?   java在spring框架上使用@ModelAttribute(“myobject”)访问服务器上的JSON