ข้อเสนอแนะเพิ่มเติม
คุณสามารถใช้ประโยชน์จากnosetestsและpdbร่วมกันแทนที่จะฉีดpdb.set_trace()
ในมุมมองของคุณด้วยตนเอง ข้อดีคือคุณสามารถสังเกตเงื่อนไขข้อผิดพลาดเมื่อพวกเขาเริ่มแรกอาจในรหัสบุคคลที่สาม
นี่เป็นข้อผิดพลาดสำหรับฉันวันนี้
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 %}
ตอนนี้ฉันรู้ว่านี่หมายความว่าฉันทำตัวสร้างคอนสตรัคเตอร์สำหรับแบบฟอร์มและฉันก็มีความคิดที่ดีว่าฟิลด์ใดเป็นปัญหา แต่ฉันสามารถใช้ pdb เพื่อดูว่าแบบฟอร์มกรอบที่บ่นเกี่ยวกับภายในแม่แบบได้หรือไม่
ใช่ฉันทำได้. ใช้ตัวเลือก--pdbใน nosetests:
tests$ nosetests test_urls_catalog.py --pdb
ทันทีที่ฉันกดข้อยกเว้นใด ๆ (รวมถึงรายการที่จัดการอย่างงดงาม), 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)
ตอนนี้เป็นที่ชัดเจนว่าตัวเลือกของฉันโต้แย้งกับตัวสร้างเขตข้อมูลที่กรอบเป็นเพราะมันเป็นรายการภายในรายการแทนที่จะเป็นรายการ / tuple ของสิ่งอันดับ
'choices': [[('_', 'any type'), (7, (7, 'type 7', 'RECTYPE_TABLE'))]]
สิ่งที่เรียบร้อยคือ pdb นี้เกิดขึ้นภายในโค้ดของกรอบไม่ใช่ของฉันและฉันไม่จำเป็นต้องแทรกมันด้วยตนเอง