为什么我的 form.py 的上下文没有显示出来?
How come the context of my form.py is not showing up?
我遇到同样的问题已经有一段时间了,并且一直在尝试不同的解决方案,但没有任何效果。我在网站上看到了不同的示例,但其中大部分都是针对旧版本的 Django。我已经尝试过这样的解决方案,但没有任何效果。
问题如标题所述,
"模板中使用了{%csrf_token%},但context没有提供值,一般是没有使用RequestContext造成的。"
我曾尝试将 RequestContext(request)
添加到我的代码中,而不是编写 {'form': 'form'}
,但没有成功。
我曾尝试在我的网址视图中使用 HttpResponse()
而不是 render_to_response
,但效果不佳。
这是我原来的 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 })
这是我添加RequestContext()
后的views.py
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))
这是我正在使用的forms.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>
我想要有四个输入字段,用户可以在其中输入他/她想到的任何问题,然后使用提交按钮将其发送到管理员的电子邮件。但是字段没有显示,只有按钮显示。
谢谢:)
为了生成您需要调用视图的表单:
html:
<a href="/your_app_name/ask_page_view">create form</a>
<form method="POST">{% csrf_token %}
{{ form.as_p }}
<input type="submit" name="submit">
</form>
your_app 的 urls.py:
url(r'ask_page_view/$', views.ask_page_view),
view.py:
from django.template.context_processors import csrf
def ask_page_view(request):
if request.method == 'POST':
form = Ask_Page_Form(request.POST)
if form.is_valid(): # here you validate the created form
pass # does nothing, just trigger the validation
else:
form = Ask_Page_Form() # here you create a new form
args = {}
args.update(csrf(request))
args['form'] = form
return render(request, "ask.html", args)
我遇到同样的问题已经有一段时间了,并且一直在尝试不同的解决方案,但没有任何效果。我在网站上看到了不同的示例,但其中大部分都是针对旧版本的 Django。我已经尝试过这样的解决方案,但没有任何效果。 问题如标题所述,
"模板中使用了{%csrf_token%},但context没有提供值,一般是没有使用RequestContext造成的。"
我曾尝试将 RequestContext(request)
添加到我的代码中,而不是编写 {'form': 'form'}
,但没有成功。
我曾尝试在我的网址视图中使用 HttpResponse()
而不是 render_to_response
,但效果不佳。
这是我原来的 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 })
这是我添加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))
这是我正在使用的forms.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>
我想要有四个输入字段,用户可以在其中输入他/她想到的任何问题,然后使用提交按钮将其发送到管理员的电子邮件。但是字段没有显示,只有按钮显示。 谢谢:)
为了生成您需要调用视图的表单:
html:
<a href="/your_app_name/ask_page_view">create form</a>
<form method="POST">{% csrf_token %}
{{ form.as_p }}
<input type="submit" name="submit">
</form>
your_app 的 urls.py:
url(r'ask_page_view/$', views.ask_page_view),
view.py:
from django.template.context_processors import csrf
def ask_page_view(request):
if request.method == 'POST':
form = Ask_Page_Form(request.POST)
if form.is_valid(): # here you validate the created form
pass # does nothing, just trigger the validation
else:
form = Ask_Page_Form() # here you create a new form
args = {}
args.update(csrf(request))
args['form'] = form
return render(request, "ask.html", args)