【问题标题】:WebPy Sessions with Templates带有模板的 WebPy 会话
【发布时间】:2012-06-10 00:58:39
【问题描述】:

使用 Webpy。我的 app.py 中有以下代码:

app = web.application(urls, globals())
session = web.session.Session(app, web.session.DiskStore('sessions'), initializer={'count': 0, 'username': 'CRC'})
render = web.template.render('templates/', base="base", globals={'context': session, 'username': 'CRC'})

class Index(object):
    def GET(self):

        if not session:
                session.count = 0
        else:
                session.count = 1

        return render.hello_form()

    def POST(self):
        form = web.input(name="Nobody", greet="Hello")
        greeting = "%s, %s" % (form.greet, form.name)
        return render.index(greeting = greeting)

然后在我的 index html 文件中添加以下内容:

$def with (greeting)

<p>
Hi <b>$context.username</b>
</p>
$if greeting:
        I just wanted to say <em style="color: green; font-size: 2em;">$greeting</em>.
$else:
        I just wanted to say <em style="color: green; font-size: 2em;">Default</em>.

<p>
<a href="/hello">Link Back To Form</a>

我在提交表单后看到了这个: 在/你好 'ThreadedDict' 对象没有属性 'username'

getattr 中的 Python /Library/Python/2.7/site-packages/web/session.py,第 64 行 Web POST /你好

对我为什么看到这个有什么想法吗?它显然不喜欢我对用户名所做的事情,但我不清楚为什么。

【问题讨论】:

    标签: session web.py


    【解决方案1】:

    正如错误所说,context 变量(实际上映射到session)没有属性username。相反,您将username 定义为全局变量本身。

    尝试直接在模板中访问username$username,或者在app.py中赋值session['username'] = 'CRC',这样在模板文件中访问$context.username时有效。

    【讨论】:

    • 很遗憾没有。 initializer={'count': 0, 'username': 'CRC'} 应该在模板中设置 $context.username。应该不需要在分配给变量上下文的会话之外设置用户名变量。我不确定你为什么要这样做。也就是说,我不确定您为什么会看到错误,我在非常相似的情况下看到了同样的错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-12
    • 2014-09-29
    • 1970-01-01
    • 2011-11-15
    • 2011-12-22
    • 2016-02-29
    • 1970-01-01
    相关资源
    最近更新 更多