2015-01-22 2 views
0

Я просто добавил фальшивку в мой проект фляги. Она работает локально, но сообщения об этой ошибке на OpenShift:Flask Security - TemplateAssertionError: нет фильтра с именем 'urlencode'

TemplateAssertionError: no filter named 'urlencode' 

Я не знаю, если это какая-то неправильная версия библиотеки, или, как отладить это. Это мой setup.py список пакетов:

install_requires=['Flask==0.10.1', 
        'SQLAlchemy==0.9.8', 
        'Flask-SQLAlchemy==2.0', 
        'Flask-Security==1.7.4', 
        'Werkzeug==0.9.5', 
        'blinker==1.3', 
        'Flask-Login==0.2.11', 
        'Flask-Mail==0.9.1', 
        'Flask-Principal==0.4.0', 
        'Flask-Script==2.0.5', 
        'Flask-WTF==0.10.3', 
        'itsdangerous==0.24', 
        'passlib==1.6.2' 

    ] 

ответ

0

Я решил эту проблему, делая «пип заморозить» на моей локальной машине, и копировальных библиотек setup.py один за другим. Хотя я до сих пор не уверен, какой из них вызвал ошибку, возможно, неправильную версию jinja2.

0

urlencode фильтр был added to jinja in v2.7. Но GAE only supports v2.6. Изменение версии к «последним» в моем app.yaml все еще работает с 2.6 (обратите внимание на python27_lib/versions/third_party/jinja2-2.6/jinja2/environment.py путь):

... 
File "/base/data/home/apps/s~healthier-staging/1.386037228785871893/lib/flask/templating.py", line 128, in render_template 
context, ctx.app) 
    File "/base/data/home/apps/s~healthier-staging/1.386037228785871893/lib/flask/templating.py", line 110, in _render 
    rv = template.render(context) 
    File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/jinja2-2.6/jinja2/environment.py", line 894, in render 
return self.environment.handle_exception(exc_info, True) 
    File "/base/data/home/apps/s~healthier-staging/1.386037228785871893/lib/flask_security/templates/security/_menu.html", line 4, in template 
<li><a href="{{ url_for_security('login') }}{% if 'next' in request.args %}?next={{ request.args.next|urlencode }}{% endif %}">Login</a></li> 
TemplateAssertionError: no filter named 'urlencode'` 

Я это исправил, добавив простой фильтр (скопировав код, который был добавлен к дзиндзя) вручную:

def do_urlescape(value): 
    """Escape for use in URLs.""" 
    return urllib.quote(value.encode('utf8')) 
app.jinja_env.globals['urlencode'] = do_urlescape