我正在使用django-transmeta(无法使用django 1.2.5获得更好的效果),它在表格中创建了多个列:content_en,content_es,content_it
在实施i18n之前,我曾经:
items = Items.objects.filter(categories__slug=slug)现在category.slug是国际化的,因此我有“category.slug_en”,“category.slug_es”,“category.slug_it”等。
所以我虽然在做:
from django.db.models import Q
from django.utils.translation import get_language
current_lang = get_language()
queryset = {
'en': Q(categories__slug_en__contains=slug),
'es': Q(categories__slug_es__contains=slug),
'it': Q(categories__slug_it__contains=slug),
}
items = Items.objects.filter(queryset[current_lang])但是,如果我这样做,每当我需要添加一种新的语言,我将不得不改变代码,当然我不想这样做。
所以我做了:
from django.db.models import Q
from django.utils.translation import get_language
current_lang = get_language()
var = 'Q(categories__slug_%s=slug)' % current_lang
queryset = eval(var)
items = Items.objects.filter(queryset)但在这种情况下,我使用的eval()当然是邪恶()的同义词,并且会更好地避免它。
所以我想知道:有没有更好的方法来做到这一点?
非常感谢!