我有一个有限状态机(django-fsm),它允许对象从源状态进入几个目标状态之一。我可以添加字典中的所有操作,如下所示:
ACTIONS { 'button_1': action1,
'button_2': action2,
...
}这转换为一个表单,每个状态都有一个提交按钮。
{% for n,m in object.get_available_current_state_transitions %}
<input type="submit" class="btn" value="{{ n|get_action|capfirst }}"
name="button_{{n}}" />
{%endfor%}
<input type="submit" class="btn primary" value="Save">
<a class="btn" onclick="javascript:history.go(-1)">Cancel</a>这通常会产生3个以上的按钮。
单击一个按钮会产生一个特定的操作,在我的例子中是在model类中定义的。
现在,我知道我可以在request.POST字典中获得clicked按钮,但这将导致级联,如果如下所示:
if 'button_1' in request.POST:
action_1()
elif 'button_2' in request.POST:
...有没有办法在一个变量中单独按下按钮(理想情况下是从请求对象中),这样我就可以像这样
ACTIONS[clicked_button_name](...)?换句话说,有没有办法在帖子字典之外获得被点击的按钮?
PS:我看过其他关于“多按键”问题的回复,但都提供了request.POST作为答案。
发布于 2012-01-24 09:53:36
如果所有的动作和字符串都已经在你的视图中了,为什么你不直接迭代这个动作字典呢?
for key, value in ACTIONS.items():
if key in request.POST:
value()只是让你的按钮名称不太可能被用作常规的表单字段名称。
几个替代方案:使用javascript处理提交,并让它设置一个表单字段,如"action“。
使用更多的唯一键,并使用正则表达式模式或字符串比较来过滤request.POST.keys()。
action = [x for x in request.POST.keys() if 'FAIRLY_UNIQUE_BUTTON_PREFIX' in x]
if action:
ACTIONS[action]()发布于 2012-01-24 09:31:42
我不这么认为,但有几个变通方法可以是:
,
,
我还假设GET不是其中任何一个的选项(但这仍然会导致if else结构)。
https://stackoverflow.com/questions/8980816
复制相似问题