0

我有一个带有名为“edit”的视图函数和一个名为“handle_upload”的函数的模块。

我想将edit函数中可用的两个变量值传递给handle_upload函数,但是我不知道如何,因为我没有在视图函数中调用handle_upload函数,所以我无法传递值作为参数。

为了清楚起见:

# my_module.py

def edit():
    dynamic variable #1
    dynamic variable #2
    render_to_response(some_site.html, locals(), context_instance = RequestContext(request))

def handle_upload():
    # here is where I would want to get both variables. 
4

3 回答 3

2

在我看来,您希望变量在对 django 服务器的两个单独请求中可用 - 首先您想在用户转到edit视图时设置它们,然后您想在另一个调用handle_upload.

这里有两个选项,具体取决于您要传递的实际数据。

  • 将其传递给模板并将其添加为编辑表单中的隐藏字段。

这可能是最简单的方法,但要小心敏感数据。如果您不希望恶意用户看到(甚至编辑)这些数据,请不要这样做。如果他们有不良意图,用户可以并且将编辑隐藏的 html 字段。如果它可能危及服务器的安全,请不要依赖此信息是正确的。

首先,我建议您使用render而不是render_to_response,因为后者已经过时并且很快就会被弃用。render确保您有一个RequestContext对象,并要求第一个参数是实际request对象:

render(request, 'some_site.html', locals())

然后在您的模板中,在表单中:

<input type='hidden' name='name1' value='{{ dynamic_variable_1 }}' />
<input type='hidden' name='name2' value='{{ dynamic_variable_2 }}' />

然后用于request.POST.get('name1')获取dynamic_variable_1等的值。

  • 使用会话中间件。

这样,数据将保留在服务器上,甚至仍然是 Python 对象,因此它可以处理各种对象(我认为,这不是 100% 确定的)。

首先,确保'django.contrib.sessions.middleware.SessionMiddleware'在您MIDDLEWARE_CLASSES的 settings.py 中。如果您使用 Django 的startapp命令,则默认情况下是这样。

然后,在 中执行以下操作edit

request.session['name1'] = dynamic_variable1
request.session['name2'] = dynamic_variable2

然后在调用的视图中handle_upload,只需执行以下操作并将变量传递给handle_upload

dynamic_variable1 = request.session['name1']
dynamic_variable2 = request.session['name2']
于 2013-08-08T19:29:17.360 回答
0

你可以选择类似的东西:

 dynamic variable #1
 dynamic variable #2

 def edit():
      global dynamic variable #1, dynamic variable #2
      render_to_response(… )

 def handle_upload():
       global dynamic variable #1, dynamic variable #2
      #… 

但是如果你是多线程的,要小心全局变量。如果你这样做考虑一个锁;-)

于 2013-08-08T18:45:56.200 回答
0

你有两个选择。

  • global使用关键字声明两个全局变量
  • handle_upload两个参数,并将两个变量传入

如果您不是从 调用它edit(),这意味着您需要将两个变量从返回edit()到调用站点,然后handle_upload()从那里传递它们。

于 2013-08-08T18:35:24.657 回答