【问题标题】:Django admin change error message ("Please correct the errors below.")Django 管理员更改错误消息(“请更正以下错误。”)
【发布时间】:2019-11-21 00:49:08
【问题描述】:

是否可以更改 django 管理错误消息。

我想添加我的自定义错误消息。

请更正以下错误。更改此消息

class mymodel(admin.ModelAdmin):

    # change message

【问题讨论】:

    标签: django django-messages


    【解决方案1】:

    仔细阅读the documentation,可以看到我们可以覆盖基础翻译,如下:

    1. 在您的 settings.py 中,添加/更新以下变量:

      LOCALE_PATHS = [
          os.path.join(BASE_DIR,"locale"),
      ]
      
    2. 在项目的基本目录中(您可以在其中找到 manage.py),创建一个名为 locale 的文件夹(或其他名称,但如果您重命名不同,请在第 1 步中进行更改)。
    3. locale 文件夹中,为要覆盖的每种语言创建一个文件夹。在我们的例子中,我们想要覆盖英语,所以我们需要创建一个名为 en 的文件夹
    4. en 文件夹中,创建另一个文件夹,命名为LC_MESSAGES
    5. LC_MESSAGES 文件夹中,创建一个名为django.po 的空文件

    此时,locale 的内容应该是这样的

    ├── locale
    │   └── en
    │       └── LC_MESSAGES
    │           └── django.po
    
    1. 现在我们需要在这个django.po 文件中添加我们想要从 Django 基本翻译中覆盖的任何字符串。您可以在源代码中找到它们。例如,在您的具体情况下,this file 告诉我们我们需要覆盖的字符串 id 位于line 459

      msgid "Please correct the errors below."
      
    2. 我们使用该 id 来提供不同的字符串,因此将以下内容添加到 django.po 文件中:

      msgid "Please correct the errors below."
      msgstr "Fix the errors now!"
      

    在这种情况下,我将原始消息替换为"Fix the errors now!"

    1. 重新编译消息
      django-admin compilemessages
      

      这个命令应该输出应该输出这样的消息:

      processing file django.po in /path/to/project/locale/en/LC_MESSAGES
      
    2. Django 现在会以更高的优先级考虑这个文件并显示新消息:

    【讨论】:

      【解决方案2】:

      解决此问题的方法之一是使用翻译,但这需要编辑 .PO 文件的知识,并且您必须对代码进行大量更改。

      幸运的是,Django 允许您将额外的.css 文件和.js 文件包含到ModelAdmin

      棘手的想法是,您将在 static 目录中创建一个 javascript 文件,并在该文件中替换您想要的任何文本

      /static
      
          admin.js
      

      admin.js

      // When the page is fully loaded
      
      document.addEventListener('DOMContentLoaded', function()
      {
          // Replace whatever text you wish, line by line
          document.body.innerHTML = document.body.innerHTML.replace(new RegExp('\\bPlease correct the errors below\\b', 'g'), 'Some fields are empty');
          document.body.innerHTML = document.body.innerHTML.replace(new RegExp('\\bThis field is required\\b', 'g'), 'This field cannot be empty');
      });
      

      admin.py

      class mymodem(admin.ModelAdmin):
          class Media:
              js = ['admin.js']
      
          ....
      

      输出:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-12-11
        • 1970-01-01
        • 2018-06-26
        • 1970-01-01
        • 2011-07-03
        • 2019-05-27
        • 2021-09-15
        相关资源
        最近更新 更多