لماذا لا يفتقد.
-
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 استيراد الققلية Mixin" في التعليمات البرمجية الخاصة بي. ربما هذا يسبب مشكلة ..