我有一个模块,其中包含一个名为'edit'的视图函数和一个名为'handle_upload'的函数。
我想将两个变量值(在编辑函数中可用)传递给handle_upload函数,但我不知道如何,因为我没有在view函数中调用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.
答案 0 :(得分: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'
位于您的settings.py中的MIDDLEWARE_CLASSES
。默认情况下,如果您使用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']
答案 1 :(得分:0)
您有两种选择。
global
关键字handle_upload
接受两个参数,然后传递如果您没有从edit()
拨打电话,则表示您需要将两个变量从edit()
返回到呼叫站点,然后将其从那里传递到handle_upload()
答案 2 :(得分: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
#…
但是如果你是多线程的话,要小心全局变量。如果这样做,请考虑锁定; - )