【发布时间】:2021-01-07 16:57:38
【问题描述】:
我有这门课:
class SomeMixin:
permissions = (SomePermission,)
methods = ('GET',)
@list_route(methods=methods, url_path='en', permission_classes=permissions)
def en_list(self):
return get_translated_objects(self, 'en')
@list_route(methods=methods, url_path='ru', permission_classes=permissions)
def ru_list(self):
return get_translated_objects(self, 'ru')
@detail_route(methods=methods, url_path='en', permission_classes=permissions)
def en_detail(self):
return get_translated_object(self.get_object(), 'en')
@detail_route(methods=methods, url_path='ru', permission_classes=permissions)
def ru_detail(self):
return get_translated_object(self.get_object(), 'ru')
我以后可以有更多的语言,但这不是一个好的解决方案。
我想创建语言列表循环并使用 setattr(self, func_name, func) 向类添加方法,例如:
langs = ('en', 'ru')
for lang in langs:
setattr(self, func.__name__, func)
但是我应该为每个方法添加装饰器,我该怎么做?
【问题讨论】:
-
随着您添加更多语言,此代码会变得非常混乱。为什么不使用本地化标头或其他东西动态确定语言,并且只使用一组方法而不是每种语言的静态路由?类似
get_translated_object(self.get_object(), self.request.META['HTTP_LANG']) -
您可能需要考虑覆盖
__getattr__。
标签: python django-rest-framework python-decorators