【问题标题】:Calling a decorator from another view从另一个视图调用装饰器
【发布时间】:2016-03-21 00:29:02
【问题描述】:

我在 users/views.py 中定义了一个装饰器,我想在 django 的 profile/views.py 中使用它

users/views.py 中的装饰器函数

def is_active_consult(f):
    def wrap(request, *args, **kwargs):
        try:
            usrid = request.session['id']
            user = CustomUser.objects.get(id=usrid)
            usercons =    Userconsultation.objects.get(doctor=user.doctor,status='InProgress')
        except ObjectDoesNotExist:
            usercons = ''

        if usercons:
            url = '/encounter_notes/'+str(usercons.userconsultationid)
            return HttpResponseRedirect(url)
        else:
            return f(request, *args, **kwargs)

    return wrap

当我尝试导入时

from users.views import is_active_consult

它给出了一个导入错误“无法导入名称 is_active_consult”

在视图中定义装饰器是否正确,如果不是,我应该把它放在哪里,现在我该如何解决这个问题。

问候

【问题讨论】:

  • 你能发布你得到的错误回溯吗?可能是您在那里有某种导入循环,但这只是一个非常疯狂的猜测。但除此之外,它应该是完全有效的。无论如何,就我个人而言,我更喜欢在我的 Django 应用程序中的一个名为 decorators 的模块中定义装饰器,但这只是个人喜好问题。
  • 你到底想在哪里导入这个?
  • 我最好的猜测是你的包结构设置不正确......
  • 您知道您可以编辑您的问题并将整个回溯发布到那里,对吗?您放入评论的那段代码根本没有帮助,因为其中似乎没有任何导入。如果没有得到关于究竟出了什么问题的更详细信息,我看不出任何人可以帮助你。

标签: python django python-decorators


【解决方案1】:

装饰器与其他任何功能一样,因此您可以在任何地方定义它,问题不在于装饰器,而是导入本身:导入循环、路径不正确或未设置等。

1) 您是否成功地将任何内容从 users/views.py 导入到 profile/views.py 中?

2) 你能粘贴你的项目结构吗? (#ls -R)

【讨论】:

  • 嗨 Saksow,我放了一个通用的装饰器模块,现在解决了这个问题。我还可以轻松导入其他一些方法。所以不确定。但正如我所提到的,我已经进一步进行了,因为无论如何这似乎是正确的方式。感谢您的帮助。
猜你喜欢
  • 2017-11-16
  • 1970-01-01
  • 2014-07-18
  • 1970-01-01
  • 1970-01-01
  • 2017-10-07
  • 2021-11-29
  • 2011-09-03
  • 1970-01-01
相关资源
最近更新 更多