0

我是 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',)}

非常感谢您提前。

4

1 回答 1

1

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

从这里你有几个选择:

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