Джанго: создание текста с пробелами для ввода - PullRequest
0 голосов
/ 03 декабря 2018

Я хочу создать текст на своем веб-сайте, где промежутки, в которые пользователь может вводить слово (например, 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})

Почему это не работает?

...