python - 具有多个 View 参数的 Django 装饰器

标签 python django decorator

我在我的项目中使用了 Django 装饰器。 我正在使用带参数的多个 View ,我需要调用 1 个装饰器。

我只希望一个 View 使用其参数调用一次。但是无论我在哪里使用装饰器,装饰器都会给出每个 View 的值。

我希望参数属于我调用的特定 View 。

我的观点和装饰者是:

def d(msg='my default message'):
    def decorator(func):
        print msg
        def newfn(request, **kwargs):
            return func(request, **kwargs)
        return newfn
    return decorator

@d('This is working')
def company_add(request):
   return ...

@d('Dont come')
def company_list(request, comp_id = None):
   return ...

如果我调用 company_add View ,我得到的输出为:

This is working
Dont come

但我的预期结果是

This is working.

任何人都可以帮助我只打印属于特定 View 的参数。

最佳答案

当你用 @d(arg) 包装函数时,你实际上在运行之前用 msg=arg 运行了 d 函数的主体修饰函数,当然还有打印 msg。您可以将 print 语句放在其他地方,例如:

def d(msg='my default message'):
    def decorator(func):
        def newfn(request, **kwargs):
            print msg
            return func(request, **kwargs)
        return newfn
    return decorator

关于python - 具有多个 View 参数的 Django 装饰器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14053050/

相关文章:

python - 谷歌合作实验室: No module named pytextrank can be found (worked previously with the same notebook)

python - 在同一行打印数字(Python)

python - 大型数据集 python (scipy) 的 interp1d 性能问题的线性插值

python - 返回 render() 时 Django NoReverseMatch

Python 类装饰器和超过最大递归深度

python - 神经网络中预测数据的反规范化

Python:Django:信号处理程序和主线程

python - Django:正确请求数据库以计算 DAU

generics - 在 Typescript 中创建通用方法装饰器

caching - 双重用途类的设计模式(内存缓存或表)