有人告诉我,在 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/