【问题标题】:Create django generic class view method创建django泛型类视图方法
【发布时间】:2014-04-03 15:27:40
【问题描述】:

我是 OOP 和其他一切的新手。我想为调用视图时调用子进程的 django 泛型类(DetailView)创建一个方法。这是我目前所拥有的,并且工作正常:

class ThingsObject(SingleObjectMixin):
    template_name = 'thingsdb/stuff.html'
    queryset = Things.objects.all()


class ThingsView(ThingsObject, generic.DetailView):
    pass

所以我想定义一个在脚本上调用 subprocess 的方法,其参数包含请求对象,如下所示:

def foo(self):
    bar= "".join(["python", "bar.py", str(self.object)])
    subprocess.call(bar, shell=True)

我希望在调用视图时运行该方法。响应应该是该脚本返回的内容,我想将其作为上下文添加到模板中。

我意识到这个问题的答案对于普通程序员来说可能是非常基础的,但我已经尝试了一段时间的一些解决方案,但没有得到任何结果。因此,我想问您如何做到这一点?

我的想法可能是我应该重写 dispatch 方法以包括运行脚本并返回额外的上下文。但老实说,我不知道在基于类的视图中我在做什么。

提前致谢!

【问题讨论】:

  • 不确定您希望在这里实现什么。为什么要在子进程中调用 Python 脚本(而不是仅仅导入并调用它)?响应应该是什么?
  • 抱歉,我在写原始问题时一定是喝醉了,我遗漏了一个重要的成分 - 响应应该是脚本返回的内容,我想将其作为上下文添加到模板中。子进程并不重要,但我使用它是因为我认为它是在调用脚本时添加参数的一种方式。我想我可以更直接地做到这一点。我将使用此信息更新我的问题。

标签: python django


【解决方案1】:

如果你想将脚本的结果添加到上下文中,那么你应该从get_context_data 调用它。结果是一个字典,所以你可以在那里添加你的数据。

请注意,subprocess.call 的结果只是脚本的返回码,而不是脚本输出的任何内容。还有各种其他方法可以获得实际输出,但正如我在评论中提到的那样,似乎根本没有充分的理由对脚本进行炮击:因为它是 Python,只需导入它并在正常的方式。

【讨论】:

  • 感谢您对我公认的奇怪问题的深思熟虑的回应,我将尝试实施您的建议。我花了一段时间阅读文档,但不知何故跳过了 get_context_data 方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-20
  • 1970-01-01
  • 2021-02-18
  • 1970-01-01
  • 1970-01-01
  • 2018-07-05
相关资源
最近更新 更多