2024-04-25 13:03:37 发布
网友
我有一个自定义的Djangomixin,只有在某些应用程序是installed的情况下,才应该导入/添加到视图类中
class MyView(LoginRequiredMixin, CustomMixin, View): # ^ # this is an optional mixin pass
如何在Django实现这一点?在
这并不是说这是一个好的设计实践或其他方法,但是可以实现的一种方法是尝试在应用程序启动时导入mixin,就像通常那样,但是将其包装在try/except中,这样,如果没有安装应用程序,则可以创建一个同名的存根类,而不执行任何操作。这样,在任何一种情况下都可以解析名称,并且您不会在启动时遇到任何导入错误。在
像这样:
try: from conditional_app import CustomMixin except ImportError: class CustomMixin(object): pass class MyView(LoginRequiredMixin, CustomMixin, View): pass
在Python3中传递给类定义的参数列表支持函数调用的所有功能,这意味着您可以在类基列表中使用*args和{}-样式的参数:
*args
bases = [LoginRequiredMixin] if apps.is_installed("some_app"): bases.append(CustomMixin) class MyView(*bases, View): ...
或者,您可以使用metaclass:
然后在视图中:
class MyView(View, metaclass=MixinsMeta): ...
这并不是说这是一个好的设计实践或其他方法,但是可以实现的一种方法是尝试在应用程序启动时导入mixin,就像通常那样,但是将其包装在try/except中,这样,如果没有安装应用程序,则可以创建一个同名的存根类,而不执行任何操作。这样,在任何一种情况下都可以解析名称,并且您不会在启动时遇到任何导入错误。在
像这样:
在Python3中传递给类定义的参数列表支持函数调用的所有功能,这意味着您可以在类基列表中使用}-样式的参数:
*args
和{或者,您可以使用metaclass:
^{pr2}$然后在视图中:
相关问题 更多 >
编程相关推荐