【问题标题】:Django multi language post modelsDjango 多语言帖子模型
【发布时间】:2018-11-08 19:47:52
【问题描述】:

我是 django 的初学者。我尝试创建多语言博客。

我使用 django 2.1.2 和 Python 3.7.1

现在,我可以轻松地将 url、关键字等翻译成“gettext_lazy”,而且效果非常好……

但我找不到任何方法或插件来翻译我的帖子模型。

我尝试安装 django-modeltranslation 但我无法使用。我认为这个插件与我的 django 版本不兼容......因为我一直在接受 _clone() got an unexpected keyword argument '_rewrite' 错误。

我不知道如何解决它。

翻译我的帖子的最佳解决方案是什么?

我想像这样在管理员中看到我的文章; https://image.ibb.co/kiuFFA/Screenshot-16.jpg

setting.py lang 之类的设置;

from django.utils.translation import gettext_lazy as _
LANGUAGE_CODE = 'en'
LANGUAGES = (
    ('de', _('Deutsch')),
    ('en', _('English')),
)

MULTILINGUAL_LANGUAGES = (
    "en",
    "de",
)

我的基本 urls.py 是这样的;

from django.conf.urls.i18n import i18n_patterns
from django.utils.translation import gettext_lazy as _

urlpatterns = [
    path('i18n/', include('django.conf.urls.i18n')),
]
urlpatterns += i18n_patterns(
    path(_('admin/'), admin.site.urls, name="admin"),
    path(_('about/'), views.about, name="about"),
    path(_('contact/'), include("contact_form.recaptcha_urls")),
    path('', include("article.urls")),
    path(_('user/'), include("user.urls")),
    path('', views.index, name="index"),
    prefix_default_language=True,
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

我的model.py是这样的;

class Article(models.Model):

    author = models.ForeignKey("auth.User",on_delete = models.CASCADE, verbose_name="Author")
    title = models.CharField(max_length = 120, verbose_name="Title")
    category = models.ForeignKey('Category', on_delete = models.CASCADE, null=True, blank=True)
    content = RichTextField(verbose_name="Content")
    created_date = models.DateTimeField(auto_now_add=True, verbose_name="Created Date")
    image = models.ImageField(blank=True, null=True, verbose_name="Add image (.jpg .png)")
    slug = models.SlugField(unique=True, max_length = 130)

    def __str__(self):
        return self.title

和我的 admin.py 一样;

@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):


    list_display = ["title", "category", "created_date", "author"]
    list_display_links = ["title", "author", "created_date"] 
    search_fields = ["title","content"] 
    list_filter = ["created_date","author"] 
    prepopulated_fields = {"slug":('title',)}

非常感谢您。

【问题讨论】:

    标签: python django python-3.x multilingual django-multilingual


    【解决方案1】:

    您可能是对的,目前 django-modeltranslation 不支持 Django 2.1.2 和/或 Python 3.7.1。他们的文档说他们支持 Python 3.6 和 Django 2.0,最新的提交时间是 2018 年 7 月 2 日。

    从这里你有几个选择:

    • 修复 django-modeltranslation 中的错误并为项目做出贡献。
    • 使用另一个适用于 Django 2.1.2 和 Python 3.7.1 的翻译 Django 包(查看此处:https://djangopackages.org/grids/g/i18n/)。
    • 使用 django-modeltranslation 但将 Django 降级到 2.0 和/或将 Python 降级到 3.6。

    【讨论】:

    • 我不能为此创建一个模型吗?例子;我在这样的模型二区域中创建; title_en = models.CharField(max_length = 120, verbose_name="Title") title_de = models.CharField(max_length = 120, verbose_name="Title") 但是我不知道如何用我的语言连接它们...
    • 是的,你可以这样做,但是你需要添加一些机制来返回当前语言函数中的正确字段。这就是其中一些软件包的作用。因此,您需要在自己编写必要的代码或使用已经完成并经过许多人测试的包之间做出选择。如果可以,我会选择后者。 Personnaly 我在许多项目中都使用过 django-Transmeta (github.com/Yaco-Sistemas/django-transmeta)。这真的很简单,只做你在这里描述的大部分工作。但不知道是否支持最新的Django/Python版本?
    • 感谢您的帮助,但 transmeta 无法在我的 django 版本上运行:/ ...我仍在为此寻找解决方案...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多