как настроить html для формы django

#javascript #jquery #html #css #django

#javascript #jquery #HTML #css #django

Вопрос:

Я использую html-шаблон для своего веб-сайта и хочу собирать информацию для своего серверной части django. В частности, я хочу вернуть значение адреса электронной почты из этой части кода

 <input type="text" placeholder="Email" value="" style="height: 30px; width: 250px; border: 2px solid grey; padding: 7px; margin-top: 10px; margin-bottom: 10px; font-size: 20px;">
  

если я введу {{%form.email%}} в value="" , он будет писать <input id= как внутри поля, так и "> за пределами поля.

если я вставлю {{%form.email%} за эту часть html-кода, он сгенерирует другое поле. Но я хочу использовать только это поле.

Как я должен это сделать?

Комментарии:

1. Что вы хотите настроить в своем поле формы? HttpResponseRedirect('/thanks/') ?

2. Я не хочу ничего настраивать на HttpResponseRedirect('/thanks/') . Это другой вопрос, мой плохой. Я хочу настроить html-код, который создает поле нужного мне стиля, из которого я могу возвращать значение, сгенерированное пользователями, в серверную форму.

Ответ №1:

Обычно вы хотите сгенерировать поле с помощью класса Django-Form. Там вы также можете настроить все свое поле: для вашего примера вам пришлось бы создать подобный класс в вашем forms.py

 class EmailForm(forms.Form)
    email  = forms.CharField(widget=forms.EmailInput(attrs={'class': 'email-input',
                                                            'placeholder': 'Email'})
  

Вы также можете использовать

 {'style': 'height: 30px; width: 250px; border: 2px solid grey; padding: 7px; margin-top: 10px; margin-bottom: 10px; font-size: 20px;'}
  

вместо {'class': 'email-input'} для вашего стиля, но обычно лучше использовать класс css.

email В вашем классе, по сути, все ваше поле электронной почты, но оно автоматически генерирует имя и идентификатор, чтобы его было проще использовать.

Теперь, если вы хотите получить значение вашего поля в серверной части, вам нужно выполнить запрос GET или POST (я думаю, в данном случае POST). Вы получите значение, используя следующий шаблон в методе, в котором вы хотите обработать полученные данные: (работает, но не оптимально) field_value = request.POST.get('fieldname') или даже лучше, как указал Дэниел в комментариях к field_value = form.cleaned_data['fieldname'] .

Итак, в вашем случае это было бы что-то вроде этого: email = form.cleaned_data['email'] . Это вернет значение, которое было введено в поле для последующего использования серверной частью.

Комментарии:

1. До последних двух абзацев у вас все шло хорошо. Смысл формы в том, что вы должны использовать ее для доступа к опубликованным данным после проверки через form.cleaned_data['fieldname'] , а не для доступа к запросу. ОТПРАВЛЯЙТЕ данные напрямую.

2. Большое вам спасибо, ребята! это действительно работает для моей тестовой страницы, но не на реальной странице. Я думаю, что код в основном такой же, но я не знаю, почему код на моей реальной странице просто не может сохранять значение в базе данных.

3. Код тестируемой страницы выглядит следующим образом: <form action="/users/presignup/" method="POST"> {% csrf_token %} {{ form.non_field_errors }} <div class="fieldWrapper"> {{ form.email.errors }} <label for="id_email">Your email:</label> <input name="email" type="text" value=""> </div> <p><input type="submit" value="Send message" /></p>

4. Реальный код страницы выглядит следующим образом: <div class="register-wrap"> <form action="" method="POST"> {% csrf_token %} {{ form.non_field_errors }} <div class="form"> {{ form.email.errors }} <input name="email" type="text" placeholder="Email" value="" style="height: 30px; width: 250px; border: 2px solid grey; padding: 7px; margin-top: 10px; margin-bottom: 10px; font-size: 20px;"> <input type="submit" value="Learn More" class="button3"> </div> </form> </div>

5. на стороне просмотра это было исправлено так, как вы сказали: email=form.cleaned_data['email'] , и, как я уже сказал, это сработало для страницы тестирования