- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Django 允许覆盖 Model
的 verbose_name
和 verbose_name_plural
,这允许我们指定 Model
的正确复数形式> 非英语语言的名称(例如,Kandydaci
是 Kandydat
的复数形式,而不是默认的 Kandydats
,后者在波兰语中看起来很奇怪)。
但是,这对于具有语法案例的语言来说还远远不够。例如,Django Admin 兴高采烈地向我们展示了这样的内容:
(其中Zaznacz kandydat do zmiany
代表选择要更改的kandydat
- Kandydat
是模型的名称
)
这是不正确的。在这句话中,型号名称应该显示在accusative case中。 ,这是kandydata
。但是,我不能简单地指定此 Model
的 verbose_name
是 Kandydata
,因为也会影响 nominative case 的所有位置。是预期的 - 到目前为止我已经找到了一个这样的地方,这是表格列的标题:
这是不正确的,因为表格标题应该称为 Kandydat
而不是 Kandydata
。
如何解决这个问题?
最佳答案
字符串'Select <verbose_name> to change'
在 admin's main view 内声明
self.title = title % force_text(self.opts.verbose_name)
作为 {{ title }}
模板变量
{% block content_title %}{% if title %}<h1>{{ title }}</h1>{% endif %}{% endblock %}
因此,触摸内置 View 是毫无问题的。但还有另一种方法可以做到这一点!你看,Django 管理模板充满了 {% block %}
s 充当占位符以覆盖它们。阅读有关 overriding Admin templates 的官方文档了解更多信息.
那么,回答你的问题。
templates
(如果它尚不存在)。my_project/templates/
创建另一个,admin
.my_project/templates/admin/
创建文件change_list.html
.里面my_project/templates/admin/change_list.html
把这些:
{% extends 'admin/change_list.html' %}
{% load myutils_filters %}
{% comment %}
You have to create an app that will hold all common tags/filters
that are re-usable across your entire project.
The model class itself is passed as cl.model
{% endcomment %}
{% block content_title %}{{ block.super|to_accusative:cl.model }}{% endblock %}
在您的 myutils/templatetags/myutils_filters.py
内文件放置这些:
from django import template
from django.utils.html import format_html
from django.utils.encoding import force_text
register = template.Library()
@register.filter()
def to_accusative(value, model):
verbose_name = model._meta.verbose_name # declared in Meta
new_name = force_text(model.accusative case()) # a custom class method (lives in your Model)
return format_html(value.replace(verbose_name, new_name))
最后,在您应用的 models.py
下,在每个型号下class
定义 classmethod
方法如下:
from django.db import models
from django.utils.translation import ugettext_lazy as _
class MyModel(models.Model):
# model fields here
def __str__():
return self.a_field
class Meta:
verbose_name = 'verbose name'
verbose_name_plural = 'verbose name plural'
# accusative_case = 'accusative name case' # BAD. Raises error. Implement a class method intead ;)
@classmethod
def accusative_case(cls):
# You'll define the Polish translation as soon as you run makemessages
return _('Name in english of the accusative case')
运行manage.py makemessages
, manage.py compilemessages
,重新加载浏览器,瞧!
注意:上面的内容可能看起来有点黑客,但效果很好。在本地测试并有效。
关于django - 如何让 Django 管理员尊重波兰语等语言的语法情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45466076/
我的 MIPS 汇编类(class)要求我将未知大小的表达式读入解析树。我从来不用处理树,所以这就是我存储值的方式: 假设用户输入了表达式 1 + 3 - 4(每个操作数只能是数字 1-9) 我最左边
这个问题已经有答案了: Remove diacritical marks (ń ǹ ň ñ ṅ ņ ṇ ṋ ṉ ̈ ɲ ƞ ᶇ ɳ ȵ) from Unicode chars (12 个回答) Jav
我的软件支持多种语言(英语、德语、波兰语、俄语……)。 出于这个原因,我有一些特定语言的文件,其中包含特定语言的对话框文本(编码为 UTF-8)。在我的 mfc 应用程序中,我打开并读取这些文件并将文
我有以下 xsl-fo 代码,试图生成外来字符。 ... Odwrotna strona tego pisma zawiera ważne informacje. je
我是一名优秀的程序员,十分优秀!