小能豆

如何从 django 管理站点管理系统语言?

javascript

有没有办法从 Django 管理界面启用/禁用或添加/删除系统语言?由于Django 说

“它读取模型中的元数据,以提供强大且可立即投入生产的界面,内容制作者可以立即使用该界面开始向网站添加内容。”

django book 告诉我们

“这是一个基于 Web 的界面,仅限受信任的站点管理员使用,可以添加、编辑和删除站点内容。”

我认为重点是管理内容站点的能力。那么,如果我的语言设置允许站点使用某种语言的内容,为什么 django 不允许我修改它?(向站点添加/删除语言)。

我会有这样的东西:

1.png


阅读 64

收藏
2025-02-24

共1个答案

小能豆

Django 默认的管理界面并不直接提供启用/禁用或添加/删除系统语言的功能。您所提到的内容主要是针对内容管理,而对于系统的语言设置和多语言支持(如语言翻译文件的启用和禁用),Django 默认不提供这样一个直观的界面。

为什么 Django 不允许直接通过管理界面修改语言?

  1. 安全性:修改语言设置通常涉及对系统设置的更改,可能会影响系统行为和数据的一致性。通常,这类操作会限制给受信任的站点管理员或开发人员,而不是内容管理员。

  2. 翻译文件的管理:语言启用/禁用涉及对语言翻译文件和内容的管理,而这些文件通常是手动管理的,通常是通过 Django 的命令行工具来完成(如 django-admin compilemessages)而不是通过 Web 界面。

  3. 设计哲学:Django 管理界面更多的是面向内容管理而非系统配置,它的设计目标是简化日常的内容操作,而不是进行较为复杂的系统配置修改。

如何解决这个问题?

如果您确实希望通过 Django 管理界面来管理语言设置(比如启用或禁用某些语言),您可以实现一个自定义的管理界面来处理这个需求。具体来说,您可以创建一个自定义的 ModelAdmin,并利用 Django 的 Translation 功能来管理语言设置。

方案:创建自定义管理界面来管理语言

您可以通过以下步骤来为 Django 添加语言管理功能:

  1. 创建一个自定义的管理界面
    您可以创建一个自定义的 ModelAdmin,为语言启用/禁用或添加/删除提供界面。

  2. 使用 django-modeltranslationdjango-parler
    这些库可以简化多语言内容的管理,您可以通过这些库来管理不同语言的内容,并在管理界面中为内容管理者提供便捷的操作界面。

示例:实现语言启用/禁用功能

假设您有一个 Language 模型,记录了所有系统支持的语言,您希望通过管理界面来启用或禁用语言:

from django.db import models
from django.contrib import admin

# 定义语言模型
class Language(models.Model):
    code = models.CharField(max_length=10, unique=True)
    name = models.CharField(max_length=100)
    is_active = models.BooleanField(default=True)

    def __str__(self):
        return self.name

# 创建自定义的 ModelAdmin 来管理语言启用/禁用
class LanguageAdmin(admin.ModelAdmin):
    list_display = ('code', 'name', 'is_active')
    list_filter = ('is_active',)
    search_fields = ('code', 'name')

    # 允许批量启用或禁用语言
    actions = ['activate_languages', 'deactivate_languages']

    def activate_languages(self, request, queryset):
        queryset.update(is_active=True)
    activate_languages.short_description = "启用选中的语言"

    def deactivate_languages(self, request, queryset):
        queryset.update(is_active=False)
    deactivate_languages.short_description = "禁用选中的语言"

# 注册语言模型和管理界面
admin.site.register(Language, LanguageAdmin)

说明:

  1. Language 模型:我们创建了一个 Language 模型来存储语言信息,包含 code(语言代码)、name(语言名称)和 is_active(是否启用)字段。

  2. 自定义的 LanguageAdmin:我们定义了一个 LanguageAdmin,并在其中增加了两个批量操作:activate_languagesdeactivate_languages。这些操作可以批量启用或禁用选中的语言。

  3. 管理界面注册:最后,我们将 Language 模型与自定义的 LanguageAdmin 注册到 Django 管理界面。

测试和使用:

  1. 在 Django 管理后台,您将能够看到 Language 模型。
  2. 您可以启用或禁用语言,通过选择多个语言并使用批量操作。
  3. 通过这些操作,您可以轻松地管理站点支持的语言。

注意事项:

  • 多语言支持:如果您使用的是 Django 的国际化(i18n)功能,并希望启用/禁用某些语言,您可能需要手动添加/删除翻译文件,或者通过 django-admin 工具来编译翻译文件。
  • 翻译内容管理:对于内容的翻译,您可以使用 django-modeltranslationdjango-parler 来简化多语言内容的管理。

通过这个方案,您可以通过 Django 管理界面启用/禁用某些语言,并结合相应的翻译文件来实现多语言内容的管理。如果您有更多的定制需求,您可以进一步扩展和优化这个方案。

2025-02-24