python - 从循环创建类字典条目比 locals() 更好的方法

标签 python django wagtail

有人告诉我,在 Python 中使用 locals() 动态创建变量是一种不好的形式。但是,我正在编写一个类(使用 Django 和 Wagtail),并且我确实需要将这些内容放入类字典中,即 class 语句的局部变量,而不是单独的数据结构中:

class BlogPage(Page):
    for language in languages:
        locals()['body_' + language] = RichTextField(blank=True)

我认为我也不能在类语句之后使用 setattr 设置这些,因为那时 Django 的元类处理已经发生了。

有更好的方法吗?

最佳答案

将不同语言作为模型属性的问题在于更改语言需要迁移数据库。如果你能控制的话,这不是你想做的事情。

解决此问题的正确方法是使用单独的模型,将页面和语言映射到适当的内容。

class BlogPageTranslation(model.Model):
  language = TextField()
  blogpage = ForeignKey(BlogPage)
  content = RichTextField()

然后,在查询页面时,查找具有所需语言和合理默认值的翻译,然后选取适当的行。

xlatcontents = BlogPageTranslation.filter(blogpage=Page,
  language__in=[someLanguage, 'en'])
somethingsomething(xlatcontents, someLanguage)

关于python - 从循环创建类字典条目比 locals() 更好的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47105563/

相关文章:

django - 使用 client.get 测试 Wagtail 页面 View

python - Wagtail:使用电子邮件创建注册页面并验证

javascript - 如何使用字典从 python 中提取嵌套的 JSON 值?

python - UnicodeDecodeError : 'ascii' codec can't decode byte 0xd1 in position 2: ordinal not in range(128)

python - 获取lxml中特定名称的所有节点?

Django vs Pylons vs Web2py : registration,邀请,事件

python - Sentry (Django) 配置问题 - SENTRY_ALLOW_ORIGIN

wagtail - 创建自定义 Wagtail OEmbedFinder

python - 如何使用 PIL 减少调色板

python - 在 matplotlib 图例中插入图像