Форум сайта python.su
Всем привет!
Делаю простенький сайт, если это можно так назвать с английскими словами.
Идея такая: добавляется слово, перевод. Потом переходим в режим тест и тут два варианта на которых я споткнулся:
Выводится английское слово и textfield для русского слова, человек вводит русское слово, если оно введено верно - подается следующее слово. Слова выбираются рандомно.
Устроено так: если request.method != POST -> из views в temlate выдается переменная word,
отображается как Label, и при вводе слова в textfield оно возвращается во views.
Вопрос, как можно теперь проверить правильно ли введено слово?
Можно ли как-то передать значение index списка в template и потом обратно во views?
И еще вопрос, можно ли сделать свою форму вроде такой:
англ слово (label) - нужно ввести перевод
нужно ввести англ слово - русское слово (label)
нужно ввести англ слово - русское слово (label)
англ слово (label) - нужно ввести перевод
Как потом отправить эти результаты во views и проверить правильность
def learn(request): words = {} words = Words.objects.all() randIndex = 0 randIndex=random.randint(0, times - 1) word = "" if request.method == "POST": form = SearchForm(request.POST) if form.is_valid(): checkWords=form.save(commit=False) return render(request, 'index/learn.html', {'checkWords':checkWords, 'rand':rand, 'randIndex':randIndex, 'form':form, 'words':words}) else: form = SearchForm() word = words[randIndex] print (word) return render(request, 'index/learn.html', {'form':form, 'word':word})
Отредактировано stas90 (Июль 13, 2017 11:05:26)
Офлайн
stas90Не надо оперировать индексами, надо оперировать Id записи.
Можно ли как-то передать значение index списка в template и потом обратно во views?
Офлайн
stas90Что значит “отправить результаты во views”. Ваша форма обрабатывается внутри представления, именно там вы создаете объект этой формы. Просто работайте с этим объектом, не надо никуда ничего передавать.
Как потом отправить эти результаты во views и проверить правильность
Офлайн
FishHookА как это сделать?
Не надо оперировать индексами, надо оперировать Id записи.
class SearchForm(forms.ModelForm): secretWord = forms.CharField(widget=forms.HiddenInput(), required=False) class Meta: model = Words fields = ('russ','secretWord',)
<form method="POST" align="center"> {% csrf_token %} {{ form.non_field_errors }} <div class="fieldWrapper"> {{ form.russ.errors }} <label for="{{ form.russ.id_for_lable }}"> {{ word }} - </label> {{ form.russ }} <input type="hidden" id="id_secretWord" name="secretWord" value={{word}}></input> <button type="submit">Check</button> </div> </form> {{ checkWords.russ }} {{ checkWords.secretWord }}
Офлайн
stas90Ну блин, у каждой записи в БД есть уникальный идентификатор Id, которому точно будет соответствовать одно слово в вашем словаре. Извлечь из БД слово и сравнить с тем, что ввел юзер. Что конкретно вам тут непонятно?
А как это сделать?
Офлайн
Не подскажите, почему secretWord не отображается после отправки введеной формы ?
Офлайн
С secretWord разобрался, оно не отображалось, т.к. не было добавлено в модель, было добавлено только в forms.py
Офлайн