У меня была такая же проблема в течение достаточно долгого времени, и я пробовал разные решения, но ничего не помогло.Я видел различные примеры здесь на веб-сайте, но большинство из них касаются более старых версий Django.Я пробовал такие решения, но ничего не работает.Проблема связана с заголовком
"A {% csrf_token%} использовался в шаблоне, но контекст не предоставил значение. Обычно это вызвано неиспользованием RequestContext."
Я пытался добавить RequestContext(request)
в мой код вместо написания {'form': 'form'}
, но это не сработало.Я пытался использовать HttpResponse()
вместо render_to_response
в представлениях моих URL-адресов, но также не получилось.
Это мой исходный views.py, прежде чем я что-то изменю!
def ask_page_view(request):
if request.method == 'POST':
form = Ask_Page_Form(request.POST)
if form.is_valid():
pass # does nothing, just trigger the validation
else:
form = Ask_Page_Form()
return render(request, "ask.html", {'form': form })
Это файл views.py, когда я добавил RequestContext()
def ask_page_view(request):
if request.method == 'POST':
form = Ask_Page_Form(request.POST)
if form.is_valid():
pass
else:
form = Ask_Page_Form()
return renderto('ask.html', context_instance = RequestContext(request))
Это файл формы.py, который я использую:
from django import forms
class Ask_Page_Form(forms.Form):
name = forms.CharField(
max_length=30,
widget=forms.TextInput(
attrs={
'placeholder': 'Write your name here',
'class': 'ask-page-input',
'label': 'Student Name'
}
))
email = forms.EmailField(
max_length=254,
widget=forms.EmailInput(
attrs={
'placeholder': 'Write your Email here',
'class': 'ask-page-input',
'label': 'Email'
}
))
subject = forms.CharField(
max_length=50,
widget = forms.TextInput(
attrs={
'placeholder': 'Write your Question or Related Subject here',
'class': 'ask-page-input',
'label': 'Subject'
}
))
message = forms.CharField(
max_length=2000,
widget=forms.Textarea(
attrs={
'placeholder': 'Write your message here',
'class': 'ask-page-input',
'label': 'Message'
}
))
source = forms.CharField( # A hidden input for internal use
max_length=50, # tell from which page the user sent the message
widget=forms.HiddenInput()
)
def clean(self):
cleaned_data = super(Ask_Page_Form, self).clean()
name = cleaned_data.get('name')
email = cleaned_data.get('email')
subject = cleaned_data.get('subject')
message = cleaned_data.get('message')
if not name and not email and not subject and not message:
raise forms.ValidationError('You have to write something!')
Это HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Physics Quizzes Ask</title>
</head>
<body>
<form method="POST">
{% csrf_token %}
{{ form.as_p }}
</form>
</body>
</html>
Я хотел бы иметь четыре поля ввода, в которых пользователь может ввести любой вопрос, о котором он / она думает, а затем отправить его с помощью кнопки отправки на электронную почту администратора.Но поля не отображаются, а только кнопка.Спасибо:)