검사가없는 이유는 무엇입니까? GetSource 전체 클래스 소스를 반환합니까?
-
06-09-2019 - |
문제
이 코드가 내 코드가 있습니다 forms.py
:
from django import forms
from formfieldset.forms import FieldsetMixin
class ContactForm(forms.Form, FieldsetMixin):
full_name = forms.CharField(max_length=120)
email = forms.EmailField()
website = forms.URLField()
message = forms.CharField(max_length=500, widget=forms.Textarea)
send_notification = forms.BooleanField(required=False)
fieldsets = ((u'Personal Information',
{'fields': ('full_name', 'email', 'website'),
'description': u'Your personal information will not ' \
u'be shared with 3rd parties.'}),
(None,
{'fields': ('message',),
'description': u'All HTML will be stripped out.'}),
(u'Preferences',
{'fields': ('send_notification',)}))
프로그래밍 방식으로 코드를 추출하려고 할 때 inspect
그것은 내려옵니다 fieldsets
:
In [1]: import inspect
In [2]: import forms
In [3]: print inspect.getsource(forms)
from django import forms
from formfieldset.forms import FieldsetMixin
class ContactForm(forms.Form, FieldsetMixin):
full_name = forms.CharField(max_length=120)
email = forms.EmailField()
website = forms.URLField()
message = forms.CharField(max_length=500, widget=forms.Textarea)
send_notification = forms.BooleanField(required=False)
fieldsets = ((u'Personal Information',
{'fields': ('full_name', 'email', 'website'),
'description': u'Your personal information will not ' \
u'be shared with 3rd parties.'}),
(None,
{'fields': ('message',),
'description': u'All HTML will be stripped out.'}),
(u'Preferences',
{'fields': ('send_notification',)}))
In [4]: print inspect.getsource(forms.ContactForm)
class ContactForm(forms.Form, FieldsetMixin):
full_name = forms.CharField(max_length=120)
email = forms.EmailField()
website = forms.URLField()
message = forms.CharField(max_length=500, widget=forms.Textarea)
send_notification = forms.BooleanField(required=False)
In [5]:
이것은 빈 줄에 문제가되지 않는 것 같습니다. 나는 그 사이에 빈 줄없이 테스트했으며 다른 속성 사이에 추가 빈 줄을 넣었습니다. 결과는 변경되지 않습니다.
검사가 이전에 부품 만 반환하는 이유 fieldsets
그리고 수업의 전체 원천이 아니십니까?
해결책
편집 : 의견을 바탕으로 수정 :
내부에 inspect.getsource(forms.ContactForm)
방법 BlockFinder.tokeneater()
위치를 결정하는 데 사용됩니다 ContactForm
블록 정지. 다른 사람들 외에도 확인합니다 tokenize.DEDENT
, GitHub에 저장된 버전의 필드 세트 직전에 발견됩니다. 라인에는 라인 브레이크 만 포함되어 있습니다 inspect
현재 블록이 끝났다고 생각합니다.
4 개의 공간을 삽입하면 다시 작동합니다. 나는 이것의 이론적 근거에 대해 논쟁 할 수 없다.
class ContactForm(forms.Form):
full_name = forms.CharField(max_length=120)
email = forms.EmailField()
website = forms.URLField()
message = forms.CharField(max_length=500, widget=forms.Textarea)
send_notification = forms.BooleanField(required=False)
# <-- insert 4 spaces here
fieldsets = ((u'Personal Information',
{'fields': ('full_name', 'email', 'website'),
'description': u'Your personal information will not ' \
u'be shared with 3rd parties.'}),
(None,
{'fields': ('message',),
'description': u'All HTML will be stripped out.'}),
(u'Preferences',
{'fields': ('send_notification',)}))
그 이유 inspect.getsource(forms)
다르게 작동하기 때문입니다 inspect
이 경우 클래스 정의의 시작 및 종료를 결정할 필요가 없습니다. 단순히 전체 파일을 출력합니다.
다른 팁
나를 위해 일합니다. 내 코드에 "formfieldset.forms import fieldsetmixin"이 없습니다. 어쩌면 그것은 문제를 일으킬 것입니다 ..
제휴하지 않습니다 StackOverflow