Một đề nghị bổ sung.
Bạn có thể tận dụng nosetests và pdb cùng nhau, thay vì đưa pdb.set_trace()
vào quan điểm của bạn một cách thủ công. Ưu điểm là bạn có thể quan sát các điều kiện lỗi khi chúng khởi động lần đầu tiên, có khả năng ở mã bên thứ 3.
Đây là một lỗi cho tôi ngày hôm nay.
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 %}
Bây giờ, tôi biết điều này có nghĩa là tôi đã ủng hộ nhà xây dựng cho biểu mẫu và tôi thậm chí còn có ý tưởng tốt về lĩnh vực nào là một vấn đề. Nhưng, tôi có thể sử dụng pdb để xem các hình thức giòn đang phàn nàn về điều gì trong một mẫu không?
Vâng tôi có thể. Sử dụng tùy chọn --pdb trên nosetests:
tests$ nosetests test_urls_catalog.py --pdb
Ngay khi tôi gặp bất kỳ ngoại lệ nào (bao gồm cả những trường hợp được xử lý một cách duyên dáng), pdb dừng lại ở nơi nó xảy ra và tôi có thể nhìn xung quanh.
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)
Bây giờ, rõ ràng rằng các đối số lựa chọn của tôi đối với hàm tạo trường giòn là vì nó là một danh sách trong danh sách, thay vì danh sách / bộ dữ liệu.
'choices': [[('_', 'any type'), (7, (7, 'type 7', 'RECTYPE_TABLE'))]]
Điều thú vị là pdb này đang diễn ra trong mã của giòn chứ không phải của tôi và tôi không cần phải chèn thủ công.