एक अतिरिक्त सुझाव।
आप अपने विचारों में मैन्युअल रूप से इंजेक्शन लगाने के बजाय, एक साथ nosetests और pdb का लाभ उठा सकते हैं pdb.set_trace()
। लाभ यह है कि जब आप पहली बार शुरू करते हैं, तो संभावित रूप से 3 पार्टी कोड में त्रुटि की स्थिति देख सकते हैं।
आज मेरे लिए एक त्रुटि है।
TypeError at /db/hcm91dmo/catalog/records/
render_option() argument after * must be a sequence, not int
....
Error during template rendering
In template /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/crispy_forms/templates/bootstrap3/field.html, error at line 28
render_option() argument after * must be a sequence, not int
18
19 {% if field|is_checkboxselectmultiple %}
20 {% include 'bootstrap3/layout/checkboxselectmultiple.html' %}
21 {% endif %}
22
23 {% if field|is_radioselect %}
24 {% include 'bootstrap3/layout/radioselect.html' %}
25 {% endif %}
26
27 {% if not field|is_checkboxselectmultiple and not field|is_radioselect %}
28
{% if field|is_checkbox and form_show_labels %}
अब, मुझे पता है कि इसका मतलब है कि मैंने फॉर्म के लिए कंस्ट्रक्टर को अलग कर दिया है, और मुझे यह भी पता है कि किस क्षेत्र में समस्या है। लेकिन, क्या मैं पीडीबी का उपयोग यह देखने के लिए कर सकता हूं कि एक टेम्प्लेट के भीतर किन खस्ता रूपों की शिकायत है ?
हाँ मैं कर सकता हूँ। Nosetests पर --pdb विकल्प का उपयोग करना :
tests$ nosetests test_urls_catalog.py --pdb
जैसे ही मैंने किसी अपवाद को मारा (जिसमें इनायत सहित संभाला गया), पीडीबी बंद हो जाता है जहां ऐसा होता है और मैं चारों ओर देख सकता हूं।
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/forms/forms.py", line 537, in __str__
return self.as_widget()
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/forms/forms.py", line 593, in as_widget
return force_text(widget.render(name, self.value(), attrs=attrs))
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/forms/widgets.py", line 513, in render
options = self.render_options(choices, [value])
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/forms/widgets.py", line 543, in render_options
output.append(self.render_option(selected_choices, *option))
TypeError: render_option() argument after * must be a sequence, not int
INFO lib.capture_middleware log write_to_index(http://localhost:8082/db/hcm91dmo/catalog/records.html)
INFO lib.capture_middleware log write_to_index:end
> /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/forms/widgets.py(543)render_options()
-> output.append(self.render_option(selected_choices, *option))
(Pdb) import pprint
(Pdb) pprint.PrettyPrinter(indent=4).pprint(self)
<django.forms.widgets.Select object at 0x115fe7d10>
(Pdb) pprint.PrettyPrinter(indent=4).pprint(vars(self))
{ 'attrs': { 'class': 'select form-control'},
'choices': [[('_', 'any type'), (7, (7, 'type 7', 'RECTYPE_TABLE'))]],
'is_required': False}
(Pdb)
अब, यह स्पष्ट है कि मेरी पसंद खस्ता खेत निर्माता के लिए तर्क थी क्योंकि यह सूची के भीतर एक सूची थी, बजाय एक सूची / टुपल्स के।
'choices': [[('_', 'any type'), (7, (7, 'type 7', 'RECTYPE_TABLE'))]]
साफ-सुथरी बात यह है कि यह पीडीबी खस्ता कोड के भीतर हो रही है, मेरी नहीं और मुझे इसे मैन्युअल रूप से सम्मिलित करने की आवश्यकता नहीं है।