검사가없는 이유는 무엇입니까? GetSource 전체 클래스 소스를 반환합니까?

StackOverflow https://stackoverflow.com/questions/929472

  •  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"이 없습니다. 어쩌면 그것은 문제를 일으킬 것입니다 ..

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top