我真正想要解决的问题:
我有一个真/假值的方表,用字符串标记行和列。
我想将其显示为带有复选框的html表单,允许用户勾选和取消勾选元素,然后提交表单,然后我想从表单中重建数组。
我正在尝试解决的子问题:
我有两个字符串的元组,("foo", "bar")
我想把它变成网页中一个复选框的名字
然后当表单提交时,将该字符串转换回原始元组
此刻我正在做,("%s$%s"%("foo","bar"))->"foo$bar",然后string.split('$')来获得字符串,这工作得很好,但它是hackish的,如果字符串中有美元就会中断。
显然我不能只使用repr和eval!
有一个统一的,标准的方法来做这件事吗?
如果不记住服务器上的状态,就不可能出现第二个问题。客户端必须并且应该始终被视为不安全的。没有相同的方法来获得与您发送的相同的字符串。用户总是可以通过某种方式入侵。
除非你想用加密的方式来做这个,我真的很怀疑:)
然而,如果你不担心脚本漏洞破坏你的应用程序,有成千上万的方法,例如你所做的,但也在一个隐藏字段中保存第一个字符串的长度,这将字符串的其余部分留给第二个字符串。或者将字符串保存在两个不同的字段中,等等。
为什么不只是嵌套结构呢?既然需要一个值和描述的矩阵,为什么不像这样嵌套它们呢:
matrix = [
[{'value': False, 'string':'str1'}, {'value': False, 'string':'str2'}],
[{'value': False, 'string':'str1'}, {'value': False, 'string':'str2'}],
]
现在matrix[0][0]
代表一个字典,键为string
和value
。没有太多的麻烦,你可以把它转换成一个html表格。
现在,您还可以(假设您不需要修改)使用嵌套元组。
困难的部分是重建。您需要小心地形成name
标记;我建议从你使用的索引来导航矩阵,像这样:
print "<table>"
for i in range(0, 2):
print "<tr>"
for j in range(0, 2):
print "<td>"
item = '<input name="matrix-%d-%d" value=%s>%s<br/>' % (i,j,
str(matrix[i][j]["value"]), matrix[i][j]["string"])
print item
print "</td">
print "</tr>"
print "</table>"
剩下的任务是根据post值重新创建所述列表,这基本上是分割字符串的情况,计算边界是否合理(预期?)并填充字典值。
看起来json是通常的方式,它是python内置的
进口jsonjson.dumps(("嗨","有"))"("嗨","有")的
json。负载("("嗨","有")")[u 'hi ' u 'there ']
json.loads (json.dumps(("嗨","th 'ere","e $ re)))[u'hi', u'th 'ere ', u'the 'e $re']