jquery – Pythonic方式指定比较运算符?

(编辑:我得到了很多关于实现的答案(我很欣赏),但我更关心的是规范语法.这个插件用户(即 Python / Django开发人员 – 不是网站用户)需要指定条件在我正在发明的语法中.所以重新解释这个问题……在编写模型或表单类时……原型Python / Django开发人员更喜欢为表单字段指定条件显示逻辑以下哪种语法? )

我正在寻找一些建议用于最pythonic(可读,直接等)的方式来指定比较运算符以供稍后在比较中使用(通过javascript执行).类似的东西(这只是一个想到的例子 – 还有很多其他可能的格式):

comparisons = (('a','>','b'),('b','==','c'))

稍后将在Javascript中进行评估.

上下文是我正在研究一个Django应用程序(最终作为插件分发),这将要求用户以我选择的任何语法编写比较(因此有关使其成为pythonic的问题).比较将引用表单字段,并最终将转换为javascript条件表单显示.我想一个例子是有序的:

class MyModel(models.Model):
    yes_or_no = models.someField...choices are yes or no...
    why = models.someField...text,but only relevant if yes_or_no == yes...
    elaborate_even_more = models.someField...more text,just here so we can have multiple conditions

    #here i am inventing some Syntax...open to suggestions!!
    why.show_if = ('yes_or_no','yes')
    elaborate_even_more.show_if = (('yes_or_no','yes'),('why','is not','None'))

    #(EDIT - help me choose a Syntax that is Pythonic and...Djangonic...and that makes your fingers happy to type!)
    #another alternative...
    conditions = {'why': ('yes_or_no','elaborate_even_more': (('yes_or_no','None'))
                  }

    #or another alternative...
    """Showe the field whiche hath the name *why* only under that circumstance 
    in whiche the field whiche hath the name *yes_or_no* hath the value *yes*,in strictest equality."""
    etc...

(挥手…使用model_form_factory()将MyModel转换为ModelForm …收集字典中的所有“field.show_if”条件并将其附加到ModelForm作为MyModelForm.conditions或其他东西…)

现在,在模板中的一大块javascript中,MyModelForm.condtions中的每个条件都将成为一个函数,用于侦听字段值的更改,并显示或隐藏另一个字段作为响应.基本上(在伪Javascript / Jquery中):

when yes_or_no changes...
    if (yes_or_no.value == 'yes'){
        $('#div that contains *why* field).show(); }
    else {
        $('#div that contains *why* field).hide(); }

这里的目标是让最终用户在模型定义中以简单,pythonic的方式指定条件显示逻辑(可能有一个选项来指定表单类的条件,我认为更多是“Djangonic”(? ?),但对于我的用例,他们需要进入模型).然后我的幕后插件将其转换为模板中的Javascript.所以你得到条件表单显示,而不必编写任何Javascript.由于这将由python / django开发人员掌握,我正在寻找建议以最原生,最舒适的方式来指定这些条件.

解决方法

这是一个想法:
import operator as op

a,b,c = 10,7,7

def f1():
    print 10

def f2():
    print 20

comparisons = ((a,op.gt,f1),(b,op.eq,c,f2))

for lhs,oper,rhs,f in comparisons:
    if oper(lhs,rhs):
        f()

=> 10
=> 20

通过适当的表示,您可以动态指定比较运算符及其相应的操作 – 实现为函数.查看operator模块以查看可用的运算符.

相关文章

页面搜索关键词突出 // 页面搜索关键词突出 $(function () {...
jQuery实时显示日期、时间 html: <span id=&quot...
jQuery 添加水印 <script src="../../../.....
中文:Sys.WebForms.PageRequestManagerParserErrorExceptio...
1. 用Response.Write方法 代码如下: Response.Write(&q...
Jquery实现按钮点击遮罩加载,处理完后恢复 思路: 1.点击按...