#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']
, и, как я уже сказал, это сработало для страницы тестирования