토네이도가있는 웹 응용 프로그램을 만들려고하고 있으며 Python 패키지 변형의 일부 스타일링 기능을 추가하고 싶습니다. 아래, 나는 토네이도와 변형 모두를 빗질하여 사용자 로그인 양식을 구현하려고합니다. 그러나 오류가 발생합니다 : TypeError: __init__() takes exactly 2 arguments (3 given)
.토네이도로 변형 구현
class demonstrate(object):
def __init__(self, title):
self.title = title
def __call__(self, method):
method.demo = self.title
return method
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.render('/Users/jamespetullo/Downloads/studenthost-master/studentscout/home.html')
@view_defaults(route_name='student_register')
class StudentRegster(tornado.web.RequestHandler):
def __init__(self, request):
self.request = request
self.macros = get_renderer('templates/main.pt').implementation().macros
def render_form(self, form, appstruct=colander.null, submitted='submit',
success=None, readonly=False, is_i18n=False):
captured = None
if submitted in self.request.POST:
try:
controls = self.request.POST.items()
captured = form.validate(controls)
if success:
response = success()
if response is not None:
return response
html = form.render(captured)
except deform.ValidationFailure as e:
html = e.render()
else:
html = form.render(appstruct, readonly=readonly)
if self.request.is_xhr:
return Response(html)
code, start, end = self.get_code(2)
locale_name = get_locale_name(self.request)
reqts = form.get_widget_resources()
printer = pprint.PrettyPrinter(width=1)
printer.format = my_safe_repr
output = printer.pformat(captured)
captured = highlight(output,
PythonLexer(),
formatter)
# values passed to template for rendering
return {
'form':html,
'captured': captured,
'code': code,
'start':start,
'end':end,
'is_i18n':is_i18n,
'locale': locale_name,
'demos':self.get_demos(),
'title':self.get_title(),
'css_links':reqts['css'],
'js_links':reqts['js'],
}
@view_config(renderer='templates/form.pt', name='edit')
@demonstrate('Edit Form')
def get(self):
import datetime
class Mapping(colander.Schema):
name = colander.SchemaNode(
colander.String(),
description='Content name')
date = colander.SchemaNode(
colander.Date(),
widget=deform.widget.DatePartsWidget(),
description='Content date')
class Schema(colander.Schema):
number = colander.SchemaNode(
colander.Integer())
mapping = Mapping()
schema = Schema()
form = deform.Form(schema, buttons=('submit',))
appstruct = {
'number': 42,
'mapping': {
'date': datetime.date(2010, 4, 9),
}
}
return self.render_form(form, appstruct=appstruct)
내 주요 문제는 내가 토네이도 get
방법을 결합하고 변형합니다 템플릿을 제공 할 수없는 생각이다. 누구든지 올바른 방향으로 나를 가리킬 수 있습니까? 당신이 가지고있는 질문이 있으면 알려주세요. 당신이 __init__
를 오버라이드 (override) 슈퍼 클래스의 서명과 일치해야합니다 (그리고 super().__init__(*args, **kw)
를 호출 할) 경우
ERROR:tornado.application:Uncaught exception
Traceback (most recent call last):
File "/Library/Python/2.7/site-packages/tornado/http1connection.py", line 238, in _read_message
delegate.finish()
File "/Library/Python/2.7/site-packages/tornado/routing.py", line 251, in finish
self.delegate.finish()
File "/Library/Python/2.7/site-packages/tornado/web.py", line 2096, in finish
self.execute()
File "/Library/Python/2.7/site-packages/tornado/web.py", line 2116, in execute
**self.handler_kwargs)
TypeError: __init__() takes exactly 2 arguments (3 given)
추적을 공유 할 수 있습니까? 클래스의 \ _ \ _ init \ _ \ _ 메소드에 잘못된 수의 인수를 전달하는 행이 표시됩니다. –
@ A.JesseJiryuDavis 제 최근 편집을 참조하십시오. – Ajax1234
추적이 너무 막연합니다. 하지만 추측해야만한다면,'@ view_defaults'로'StudentRegister' 핸들러를 꾸미면이 데코레이터는'StudentRegister'에 추가 인수를 전달하고 있습니다 만, 보시다시피,'__init__'입니다. 두 가지 주장 만 취합니다. 나는 당신이'__init __ (self, request, * args)'와 같은 것으로 그것을 변경하려고 노력해야한다고 생각하고 그것이 작동하는지 확인해야한다. – xyres