Я хочу создать текст на своем веб-сайте, где промежутки, в которые пользователь может вводить слово (например, c-тесты для изучения языка), создаются динамически в зависимости от текста, который функция получает из базы данных (еще не реализовано).
Моя идея состояла в том, чтобы создать набор форм, в котором каждая метка отличается в зависимости от переменной, которую я ей предоставляю.
Вот мои views.py
def ctest(request):
c_test_tokens, gaps, tokenindexe = generate_c_test(beispieltext())
# EXAMPLE
# NOT WORKING ON POST REQUEST YET
# if this is a POST request we need to process the form data
if request.method == 'POST':
# create a form instance and populate it with data from the request:
form = CTestform(request.POST)
# check whether it's valid:
if form.is_valid():
# process the data in form.cleaned_data as required
# ...
# redirect to a new URL:
return HttpResponseRedirect('/thanks/')
# if a GET (or any other method) we'll create a blank form
else:
ctestformset = formset_factory(CTestform, extra=len(gaps))
return render(request, 'ctest.html', {'form': ctestformset})
Вот мой файл forms.py
class CTestform(forms.Form):
hello = forms.CharField(widget=forms.TextInput(attrs={'size': '5'}),
required=False, label='hello', label_suffix='')
Хорошо ли подходит этот подход и как я могу дать форме список, в котором каждый элемент является меткой для каждого пробела, или я должен искать альтернативу?
РЕДАКТИРОВАТЬ:
Хорошо, я попробовал вещи на этом сайте Возможно переменное количество входов с формами Django?
MyУ форм.py теперь есть функция
def creategaps(self, c_test_tokens, gaps, tokenindexes):
wordsbeforegap = ''
gaps = {}
iteratorforgaps = 0
for i in (0, len(c_test_tokens)-1):
if '#GAP#' not in c_test_tokens[i]:
wordsbeforegap = wordsbeforegap + c_test_tokens[i]
else:
gaps[iteratorforgaps] = forms.CharField(widget=forms.TextInput(attrs={'size': '5'}),
required=False, label=wordsbeforegap, label_suffix='')
wordsbeforegap = ''
return type('test', (forms.BaseForm,), {'base_fields': gaps})
Я пытался вызвать функцию из views.py, но она не создает никакой формы.Вот инструкция else в views.py
else:
form = CTestform.creategaps("test", c_test_tokens, gaps, tokenindexe)
return render(request, 'ctest.html', {'form': form})
Почему это не работает?