Python DJANGO未在我的html模板中返回上下文
为什么此上下文不在我的html模板中呈现:Python DJANGO未在我的html模板中返回上下文,python,django,Python,Django,为什么此上下文不在我的html模板中呈现: return render(request, 'index.html',{'message_name':name}) 成功提交我的联系人表单后,此上下文将打印用户名。这是我的密码: 视图.py @csrf_exempt def home_view(request,*args,**kwargs): name = None if request.method == "POST": contact_f
return render(request, 'index.html',{'message_name':name})
成功提交我的联系人表单后,此上下文将打印用户名。这是我的密码:
视图.py
@csrf_exempt
def home_view(request,*args,**kwargs):
name = None
if request.method == "POST":
contact_form = ContactForm(request.POST)
if contact_form.is_valid():
name = request.POST['name']
email = request.POST['email']
subject = request.POST['subject']
message = request.POST['message']
save_details = Contact(name=name,email=email,subject=subject,message=message)
save_details.save()
return HttpResponseRedirect("http://127.0.0.1:8000/")
return render(request, 'index.html',{'message_name':name})
else:
print("not submitted")
else:
contact_form = ContactForm()
return render(request, 'index.html',{'form':contact_form})
from django.urls import path
from pages import views
urlpatterns = [
path('', views.home_view, name="home"),
]
from django.contrib import admin
from django.urls import path,include
from pages import urls
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('pages.urls')),
]
应用程序URL.py
@csrf_exempt
def home_view(request,*args,**kwargs):
name = None
if request.method == "POST":
contact_form = ContactForm(request.POST)
if contact_form.is_valid():
name = request.POST['name']
email = request.POST['email']
subject = request.POST['subject']
message = request.POST['message']
save_details = Contact(name=name,email=email,subject=subject,message=message)
save_details.save()
return HttpResponseRedirect("http://127.0.0.1:8000/")
return render(request, 'index.html',{'message_name':name})
else:
print("not submitted")
else:
contact_form = ContactForm()
return render(request, 'index.html',{'form':contact_form})
from django.urls import path
from pages import views
urlpatterns = [
path('', views.home_view, name="home"),
]
from django.contrib import admin
from django.urls import path,include
from pages import urls
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('pages.urls')),
]
根URL.py
@csrf_exempt
def home_view(request,*args,**kwargs):
name = None
if request.method == "POST":
contact_form = ContactForm(request.POST)
if contact_form.is_valid():
name = request.POST['name']
email = request.POST['email']
subject = request.POST['subject']
message = request.POST['message']
save_details = Contact(name=name,email=email,subject=subject,message=message)
save_details.save()
return HttpResponseRedirect("http://127.0.0.1:8000/")
return render(request, 'index.html',{'message_name':name})
else:
print("not submitted")
else:
contact_form = ContactForm()
return render(request, 'index.html',{'form':contact_form})
from django.urls import path
from pages import views
urlpatterns = [
path('', views.home_view, name="home"),
]
from django.contrib import admin
from django.urls import path,include
from pages import urls
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('pages.urls')),
]
index.html
<!--===== CONTACT =====-->
<section class="contact section" id="contact">
<h2 class="section-title">Contact</h2>
{% if message_name %}
<div class="centerTest">
<h1> Thanks {{ message_name }} for your message. We will get back to you very soon</h1>
</div>
{% else %}
<div class="contact__container bd-grid">
<form action="#contact" method = "POST" class="contact__form">
{% for error in form.non_field_errors %}
<div class="alert alert-danger" role="alert">
{{ error }}
</div>
{% endfor %}
<label>Name:</label>
{{ form.errors.name }}
<input type="text" placeholder="Name" name="name" class="contact__input" {% if form.is_bound %}value="{{ form.name.value }} {% endif %}">
<label>Email:</label>
{{ form.errors.email }}
<input type="mail" placeholder="Email" name="email" class="contact__input" {% if form.is_bound %}value="{{ form.email.value }} {% endif %}">
<label>Subject:</label>
{{ form.errors.subject }}
<input type="text" placeholder="optional" name="subject" class="contact__input" {% if form.is_bound %}value="{{ form.subject.value }} {% endif %}">
<label>Message:</label>
{{ form.errors.message }}
<textarea name="message" placeholder="message" id="" cols="0" rows="10" class="contact__input" >{% if form.is_bound %}{{ form.message.value }} {% endif %}</textarea>
<input type="submit" value="Send" class="contact__button button">
{% endif %}
接触
{%if消息_name%}
谢谢{{message_name}}的留言。我们会很快回复你的
{%else%}
{%表示表单中的错误。非\u字段\u错误%}
{{error}}
{%endfor%}
姓名:
{{form.errors.name}
电邮:
{{form.errors.email}
主题:
{{form.errors.subject}
信息:
{{form.errors.message}
{%if form.is_-bound%}{{form.message.value}{%endif%}
{%endif%}
如果我删除HttpResponseRedirect,那么它将在我的html模板中显示上下文
但问题是它在刷新时一次又一次地重新提交我的。添加HttpResponseRedirect后,它将停止重新提交表单,但不打印上下文。作为基本的Python概念(可能还有任何其他编程语言),您不能有两个return
语句,一个在函数中,一个在另一个之上,因为第一个语句将使第二个语句无法访问
例如:
def say_hello(name, age):
return f"hello {name}"
return f"your age is {age}"
如果执行此函数,将只得到“hello john doe”,因为第二条返回语句从未执行过
在您的情况下,如果保留return HttpResponseRedirect()
,则将永远不会执行return render()
,因此您将永远看不到上下文
如果您想将用户重定向到特定路由,您应该有条件地这样做,以便有机会执行一个
返回或另一个。您不能在redirect中直接传递上下文,也不能在django中直接传递HttpResponseRedirect。您需要使用会话方法。试试这个:
@csrf_exempt
def home_view(request,*args,**kwargs):
name = None
if request.method == "POST":
contact_form = ContactForm(request.POST)
if contact_form.is_valid():
name = request.POST['name']
email = request.POST['email']
subject = request.POST['subject']
message = request.POST['message']
save_details = Contact(name=name,email=email,subject=subject,message=message)
save_details.save()
request.session['name'] = name
return redirect(home_view)
else:
print("not submitted")
else:
contact_form = ContactForm()
return render(request, 'index.html',{'form':contact_form})
在index.html中传递此{{request.session.name}
以显示您的上下文。您能给我举个例子吗?我只需要在重定向后在html页面中显示上下文如何在djago中在html重定向页面中显示上下文?在一个代码块中不能有两个返回语句,即任何编码语言的通用法则