Django管理员更改错误消息(“请更正以下错误。”)

时间:2019-07-11 10:12:17

标签: django django-messages

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

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

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

class mymodel(admin.ModelAdmin):

    # change message

enter image description here

2 个答案:

答案 0 :(得分:2)

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

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

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

这时,语言环境的内容应该是这样

├── 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现在将以更高的优先级考虑该文件并显示新消息:

enter image description here

答案 1 :(得分: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']

    ....

输出:

enter image description here

enter image description here