1

pyramid/url.py にバグがあるようです。ここにコードがあります

import os
from wsgiref.simple_server import make_server
from pyramid.config import Configurator
from pyramid.response import Response
from pyramid.view import view_config
here = os.path.dirname(os.path.abspath(__file__))

@view_config(route_name='firstview',renderer='firstview.mako',request_method='GET')
def firstview(request):
    return {'example':'text'}

@view_config(route_name='secondview',request_method='POST')
def secondview(request):
    return Response('second view')

if __name__ == '__main__':
    settings = {}
    settings['mako.directories'] = os.path.join(here,'templates')
    config = Configurator(settings=settings)
    config.add_route('firstview','/firstview')
    config.add_route('secondview','/secondview')
    config.scan()
    app = config.make_wsgi_app()

これはfirstviewのテンプレートです

# -*- coding: utf-8 -*- 
<form name="example"
action="${request.route_url('secondview')}"
method="POST">
  example
    <textarea rows="4" cols="50" name="name">
    </textarea><br>
    <input type="submit" value="Submit">
</form>

そして、ここにスタックトレースがあります

2013-06-10 21:05:40,280 - DEBUG - http://localhost:8080 #app_url
2013-06-10 21:05:40,280 - DEBUG - None #path
2013-06-10 21:05:40,280 - DEBUG -  #suffix
2013-06-10 21:05:40,280 - DEBUG -  #qs
2013-06-10 21:05:40,280 - DEBUG -  #anchorTraceback (most recent call last):
  File "/Users/abc/env/bin/lib/python2.7/wsgiref/handlers.py", line 85, in run
    self.result = application(self.environ, self.start_response)  File "/Users/abc/env/bin/lib/python2.7/site-packages/pyramid-1.4.1-py2.7.egg/pyramid/router.py", line 251, in __call__
    response = self.invoke_subrequest(request, use_tweens=True)
  File "/Users/abc/env/bin/lib/python2.7/site-packages/pyramid-1.4.1-py2.7.egg/pyramid/router.py", line 227, in invoke_subrequest    response = handle_request(request)
  File "/Users/abc/env/bin/lib/python2.7/site-packages/pyramid-1.4.1-py2.7.egg/pyramid/tweens.py", line 21, in excview_tween
    response = handler(request)  File "/Users/abc/env/bin/lib/python2.7/site-packages/pyramid-1.4.1-py2.7.egg/pyramid/router.py", line 161, in handle_request
    response = view_callable(context, request)
  File "/Users/abc/env/bin/lib/python2.7/site-packages/pyramid-1.4.1-py2.7.egg/pyramid/config/views.py", line 321, in attr_view    return view(context, request)
  File "/Users/abc/env/bin/lib/python2.7/site-packages/pyramid-1.4.1-py2.7.egg/pyramid/config/views.py", line 297, in predicate_wrapper
    return view(context, request)  File "/Users/abc/env/bin/lib/python2.7/site-packages/pyramid-1.4.1-py2.7.egg/pyramid/config/views.py", line 369, in rendered_view
    context)
  File "/Users/abc/env/bin/lib/python2.7/site-packages/pyramid-1.4.1-py2.7.egg/pyramid/renderers.py", line 531, in render_view    return self.render_to_resp
onse(response, system, request=request)
  File "/Users/abc/env/bin/lib/python2.7/site-packages/pyramid-1.4.1-py2.7.egg/pyramid/renderers.py", line 561, in render_to_response
    result = self.render(value, system_values, request=request)
  File "/Users/abc/env/bin/lib/python2.7/site-packages/pyramid-1.4.1-py2.7.egg/pyramid/renderers.py", line 557, in render
    result = renderer(value, system_values)
  File "/Users/abc/env/bin/lib/python2.7/site-packages/pyramid-1.4.1-py2.7.egg/pyramid/mako_templating.py", line 215, in __call__    
    reraise(MakoRenderingException(errtext), None, exc_info[2])
  File "/Users/abc/env/bin/lib/python2.7/site-packages/pyramid-1.4.1-py2.7.egg/pyramid/mako_templating.py", line 207, in __call__
    result = template.render_unicode(**system)
  File "/Users/abc/env/bin/lib/python2.7/site-packages/Mako-0.8.0-py2.7.egg/mako/template.py", line 452, in render_unicode
    as_unicode=True)
  File "/Users/abc/env/bin/lib/python2.7/site-packages/Mako-0.8.0-py2.7.egg/mako/runtime.py", line 783, in _render 
    **_kwargs_for_callable(callable_, data))
  File "/Users/abc/env/bin/lib/python2.7/site-packages/Mako-0.8.0-py2.7.egg/mako/runtime.py", line 815, in _render_context
    _exec_template(inherit, lclcontext, args=args, kwargs=kwargs)
  File "/Users/abc/env/bin/lib/python2.7/site-packages/Mako-0.8.0-py2.7.egg/mako/runtime.py", line 841, in _exec_template
    callable_(context, *args, **kwargs)
  File "firstview_mako", line 23, in render_body
  File "/Users/abc/env/bin/lib/python2.7/site-packages/pyramid-1.4.1-py2.7.egg/pyramid/url.py", line 267, in route_url
    return app_url + path + suffix + qs + anchor
MakoRenderingException:

Traceback (most recent call last):
  File "/Users/abc/env/bin/lib/python2.7/site-packages/pyramid-1.4.1-py2.7.egg/pyramid/mako_templating.py", line 207, in __call__
    result = template.render_unicode(**system)
  File "/Users/abc/env/bin/lib/python2.7/site-packages/Mako-0.8.0-py2.7.egg/mako/template.py", line 452, in render_unicode
    as_unicode=True)
  File "/Users/abc/env/bin/lib/python2.7/site-packages/Mako-0.8.0-py2.7.egg/mako/runtime.py", line 783, in _render
    **_kwargs_for_callable(callable_, data))
  File "/Users/abc/env/bin/lib/python2.7/site-packages/Mako-0.8.0-py2.7.egg/mako/runtime.py", line 815, in _render_context
    _exec_template(inherit, lclcontext, args=args, kwargs=kwargs)
  File "/Users/abc/env/bin/lib/python2.7/site-packages/Mako-0.8.0-py2.7.egg/mako/runtime.py", line 841, in _exec_template
    callable_(context, *args, **kwargs)
  File "/Users/abc/piramide/bugreplica/templates/firstview.mako", line 3, in render_body
    action="${request.route_url('secondview')}"
  File "/Users/abc/env/bin/lib/python2.7/site-packages/pyramid-1.4.1-py2.7.egg/pyramid/url.py", line 267, in route_url
    return app_url + path + suffix + qs + anchor
TypeError: cannot concatenate 'str' and 'NoneType' objects

デバッグ目的でいくつかの行を追加したため、行番号は異なります。

pathとにかく、私はそれが戻ってくることに気づきましたNone。コードでは、このケースの処理はありません。私はピラミッドフレームワークを初めて使用します。助けていただければ幸いです。ありがとう!

PS

どうやら、この問題は url.py の関数 route_url に起因するようです。この場合の具体的なroute.pregenerator(self, elements, kw)返品・取扱いはございません。None

4

0 に答える 0