-2

我们有一个程序可以在实时环境或测试环境中运行。唯一的区别是测试环境上的 URL 包含“/test/”。在测试环境中,某些功能会导致它切换到实时环境(当 URL 被硬编码时!),所以我正在尝试解决这个问题。

我在 JavaScript 中创建了这个函数:

function GetTestMode()
{
    // If "/test/" exists in URL, keep it there (we are in test mode).
    var currentURL = document.URL;
    var sTestMode = "";
    if (currentURL.indexOf("/test/") != -1)
    {
    // test mode (according to URL)
      sTestMode = "test/";
    }
    return sTestMode;
}

这由 JavaScript 函数使用并按预期工作。

但是,大部分 UI 代码都是 Python 代码(创建 HTML)。所以我想在 Python 中得到这个 JavaScript 结果。到目前为止,我有:

import cgi
import os
import sys
import re

def DrawUI (self, short=False):
    print '<br />'
    print '<div class="box2">'
    print '<table cellspacing=0 cellpadding=0 border="0">'
    print '<tr>'

    sTestMode = "test mode = %s" % ('<a href="javascript:GetTestMode()" >')
    print 'sTestMode = ' + sTestMode + '<br />'

这会导致此代码后面的打印语句(甚至可以是print 'hello world')成为一个链接,如果我单击它,它将显示浏览器中 JavaScript 函数的正确返回值。

如何才能sTestMode包含返回值(无需用户交互)?

4

1 回答 1

1

我假设您正在使用mod_python

这是一个破解示例,如何将 Javascript 变量发送到服务器。

在 Python 中,使用cgi 模块

form = cgi.FieldStorage()
sTestMode = form.getfirst('sTestMode')
sTestMode = cgi.escape(sTestMode)  # Avoid script injection escaping the user input

在 JavaScript 中,使用 JQuery(不确定这是否正确,如果错误,也许一些 JQuery 大师可以解决此问题):

var filename = '/url/to/your/script';
$.ajax({
  url: filename + '?sTestMode=' + sTestMode,
  type: 'GET'
});

/url/to/your/script?sTestMode=something_funny如果您在实现 Javascript 版本时遇到问题,您可以通过在浏览器中调用来确保您的 Python 脚本是正确的。

但是,您应该阅读CGIAjax的概念以及mod_python的工作原理。

于 2012-08-16T09:16:17.600 回答