我發現了一些類似的問題,但並不完全。我對Django是'新'的,並且嘗試創建一個動態表單,也沒有Models。我想要讀取一個目錄,找到某個類型的文件,然後將這些文件顯示在清單中,供選擇和稍後處理。我仍然需要制定選擇和處理方法,但對於初學者,我只想讓清單工作。我在這裏找到了清單表格:Django form multiple choice,這就是我的表格。將對象傳遞給Django表單
這是我到目前爲止。打印聲明僅用於我自己的疑難解答,並且我始終得到'什麼參數?'我的猜測是我沒有正確傳遞參數,但它看起來像我讀過的其他示例的數量。
在此先感謝您的支持。
views.py
def select(request):
if request.method == 'POST':
txt_list = [fn for fn in os.listdir('/static/data/') if re.search(r'\.txt$', fn, re.IGNORECASE)]
txt_zip = zip(txt_list, txt_list)
form = SelectForm(request.POST, txt_zip=txt_zip)
if form.is_valid():
choices = form.cleaned_data.get('choices')
# do something with your results
else:
form = SelectForm
return render_to_response('select.html', {'form': form},
context_instance=RequestContext(request))
forms.py
class SelectForm(forms.Form):
def __init__(self, *args, **kwargs):
self.txt = kwargs.pop('txt_zip', None)
super(SelectForm, self).__init__(*args, **kwargs)
if self.txt is not None:
print("Got args")
else:
print("What args?")
CHOICES = (list(self.txt),)
# tuple contents (<value>, <label>)
choices = forms.MultipleChoiceField(choices=CHOICES, widget=forms.CheckboxSelectMultiple())
模板(爲完整起見)
<div class="container">
<h2>Select files for reports</h2>
<br/>
<form method='post'>{% csrf_token %}
{{ form.as_p }}
<br/>
<input type='submit' value='Select files' class="btn btn-primary">
</form>
</div>
你確定你在POST時不斷收到'args'嗎?聽起來像你應該在'else'分支中執行'form = SelectForm()',並且應該沒有'txt_zip'參數。 –