Ek bir öneri.
Kaldıraç nosetests ve Pdb yerine enjekte birlikte pdb.set_trace()
manuel görünümlerinde. Avantajı, hata koşullarını ilk başladığında, muhtemelen 3. taraf kodunda gözlemleyebilmenizdir.
İşte bugün benim için bir hata.
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 %}
Şimdi, bunun yapıcıyı form için kandırdığım anlamına geldiğini biliyorum ve hatta hangi alanın sorun olduğu hakkında iyi bir fikrim var. Ancak, bir şablonda hangi gevrek formların şikayet ettiğini görmek için pdb kullanabilir miyim ?
Evet yapabilirim. Nosetestlerde --pdb seçeneğini kullanma :
tests$ nosetests test_urls_catalog.py --pdb
Herhangi bir istisnayı vurur vurmaz (zarif bir şekilde işlenenler dahil), pdb nerede durur ve etrafa bakabilirim.
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)
Şimdi, gevrek alan yapıcısına yaptığım seçimler argümanı, bir liste / tuples listesi yerine bir liste içinde bir liste olduğu açıktı.
'choices': [[('_', 'any type'), (7, (7, 'type 7', 'RECTYPE_TABLE'))]]
Temiz şey, bu pdb benim değil çıtır'ın kodu içinde yer alıyor ve ben elle eklemek gerek yoktu.