【问题标题】:Few lines from app.py script I don't understandapp.py 脚本中的几行我不明白
【发布时间】:2012-03-18 08:35:10
【问题描述】:

所以我在这里了解到 python 正在将 render 变量分配给 web.template.render,但我真的不明白它在用英语做什么。我的模板目录正在被“调用”(这是正确的词吗?)并且以某种方式使用了layout.html。我一直在尝试破解代码,但没有这条线它仍然可以工作。有人指示我使用它,但我不明白。

render = web.template.render('templates/', base="layout")

在这个程度上,以下类对我来说是有意义的:分配给它的对象将返回hello_form.html,并且由于第二个函数(方法?),它将允许用户在提示中输入内容并返回这些值。我不太了解form 变量行或return 行在做什么。任何帮助或快速翻译都会对我有很大帮助,谢谢!

class Index(object):
    def GET(self):
        return render.hello_form()

    def POST(self):
        form = web.input(name = "what", greet = "no response?")
        greeting = "%s, %s" % (form.greet, form.name)
        return render.index(greeting = greeting)

【问题讨论】:

    标签: python html class render web.py


    【解决方案1】:

    如果我错了,请纠正我,但您的困惑是 name = "what" 类型语法?这只是说函数,在本例中为 web.input 接受一个名为 name 的参数,并且您将其直接分配给 "what"。与render.index(greeting = greeting) 相同,它接受一个参数greeting,您将在return 语句上方的行中评估的局部变量greeting 的值分配给该参数。

    所以不看方法,我会说不能保证return render.index(greeting)render.index(greeting = greeting) 相同。以这个取自here 的代码为例,但没有我刚刚注意到的无限循环:

    # Default Values
    def multiprint(n=5, txt=""):
        i = 0
        while i < n:
            print txt
            i++
    

    你可以这样调用这个函数:

    >>> multiprint()
    
    
    
    
    
    
    >>> multiprint(1)
    
    
    >>> multiprint(1,"hi")
    hi
    
    >>> multiprint(txt="hi")
    hi
    hi
    hi
    hi
    hi
    

    在最后一行中,我们没有指定第一个参数n,但指定了txt。我也同意你的观点,greeting = greeting 令人困惑。这似乎是一个可爱的小把戏,但我不太在意它。参数名称为greeting,如我们示例中的txt,局部变量为greeting。就个人而言,我会将局部变量命名为其他名称,然后使用 render.index(greeting = myGreetingText) 或类似名称。

    【讨论】:

    • return render.index(greeting)return render.index(greeting = greeting) 不同吗?你是说第一个greeting是取参数,但是做= greeting会使参数引用局部变量greeting?如果是这种情况,输入return render.index(greetparam = greeting) 或类似的东西就不会那么混乱了。
    猜你喜欢
    • 1970-01-01
    • 2022-12-11
    • 2023-03-10
    • 1970-01-01
    • 2017-09-05
    • 1970-01-01
    • 2023-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多