Django 管理员更改错误消息 ("Please correct the errors below.")
Django admin change error message ("Please correct the errors below.")
是否可以更改 django 管理错误消息。
我想添加我的自定义错误消息。
请更正以下错误。更改此消息
class mymodel(admin.ModelAdmin):
# change message
仔细阅读the documentation,我们可以看到我们可以覆盖基础翻译,如下:
在你的settings.py
、add/update下面的变量中:
LOCALE_PATHS = [
os.path.join(BASE_DIR,"locale"),
]
- 在项目的基本目录中(您可以在其中找到
manage.py
)创建一个名为 locale
的文件夹(或其他任何名称,但如果您将其重命名为不同名称,请在步骤 1 中进行更改)。
- 在
locale
文件夹中,为您要覆盖的每种语言创建一个文件夹。在我们的例子中,我们想要覆盖英语,所以我们需要创建一个名为 en
的文件夹
- 在
en
文件夹中,创建另一个文件夹,命名为 LC_MESSAGES
- 在
LC_MESSAGES
文件夹中,创建一个名为 django.po
的空 文件
此时locale的内容应该是这样的
├── locale
│ └── en
│ └── LC_MESSAGES
│ └── django.po
现在我们需要在这个 django.po
文件中添加我们想要从 Django 基础翻译中覆盖的任何字符串。您可以在源代码中找到它们。例如,在您的特定情况下,this file tells us that the string id we need to override is on line 459:
msgid "Please correct the errors below."
我们使用该 ID 来提供不同的字符串,因此将以下内容添加到 django.po
文件中:
msgid "Please correct the errors below."
msgstr "Fix the errors now!"
在这种情况下,我将原始消息替换为 "Fix the errors now!"
用
重新编译消息
django-admin compilemessages
此命令应输出应输出如下消息:
processing file django.po in /path/to/project/locale/en/LC_MESSAGES
Django 现在将优先考虑此文件并显示新消息:
解决此问题的方法之一是使用翻译,但这需要编辑 .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']
....
输出:
是否可以更改 django 管理错误消息。
我想添加我的自定义错误消息。
请更正以下错误。更改此消息
class mymodel(admin.ModelAdmin):
# change message
仔细阅读the documentation,我们可以看到我们可以覆盖基础翻译,如下:
在你的
settings.py
、add/update下面的变量中:LOCALE_PATHS = [ os.path.join(BASE_DIR,"locale"), ]
- 在项目的基本目录中(您可以在其中找到
manage.py
)创建一个名为locale
的文件夹(或其他任何名称,但如果您将其重命名为不同名称,请在步骤 1 中进行更改)。 - 在
locale
文件夹中,为您要覆盖的每种语言创建一个文件夹。在我们的例子中,我们想要覆盖英语,所以我们需要创建一个名为en
的文件夹
- 在
en
文件夹中,创建另一个文件夹,命名为LC_MESSAGES
- 在
LC_MESSAGES
文件夹中,创建一个名为django.po
的空 文件
此时locale的内容应该是这样的
├── locale
│ └── en
│ └── LC_MESSAGES
│ └── django.po
现在我们需要在这个
django.po
文件中添加我们想要从 Django 基础翻译中覆盖的任何字符串。您可以在源代码中找到它们。例如,在您的特定情况下,this file tells us that the string id we need to override is on line 459:msgid "Please correct the errors below."
我们使用该 ID 来提供不同的字符串,因此将以下内容添加到
django.po
文件中:msgid "Please correct the errors below." msgstr "Fix the errors now!"
在这种情况下,我将原始消息替换为 "Fix the errors now!"
用
重新编译消息django-admin compilemessages
此命令应输出应输出如下消息:
processing file django.po in /path/to/project/locale/en/LC_MESSAGES
Django 现在将优先考虑此文件并显示新消息:
解决此问题的方法之一是使用翻译,但这需要编辑 .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']
....
输出: