django - Django - 从页面重定向传递参数
问题描述
我刚开始使用 Python 和 Django,希望在成功注册表单后将用户重定向到主页,头部按摩更改为“您已成功注册”。我的代码在重定向后不更改按摩是:
网址.py:
urlpatterns = [
path('', IndexView.as_view(), name = 'index'),
path('register/', views.register, name = 'register'),
]
视图.py:
class IndexView(TemplateView):
template_name = 'first_ap/index.html'
def get_context_data(self, *args, **kwargs):
t_user = 'Hello my friend'
context = {
'viva':t_user
}
return context
def register(request):
if request.method == "POST":
form = RegForm(request.POST)
if form.is_valid():
new_user = form.save(commit=False)
new_user.set_password(form.cleaned_data['password'])
new_user.save()
return redirect('index')
else:
form = RegForm()
return render(request, 'first_ap/register.html', {'form': form})
在 html 文件中,我输入:
<h1>{{ viva }}!</h1>
从“你好我的朋友”重定向到“您已成功注册”后,我应该如何修改代码以更改上下文?我尝试了几种选择,但都失败了。
解决方案
解决方案:
from django.urls import reverse
class IndexView(TemplateView):
template_name = 'first_ap/index.html'
def get_context_data(self, *args, **kwargs):
# request.GET contains the query parameters, check if `first_visit` is 1 or not
is_first_visit = self.request.GET.get('first_visit', 0) == "1"
if is_first_visit is False:
t_user = 'Hello my friend'
else:
t_user = 'You have successfully registered'
context = {
'viva': t_user
}
return context
def register(request):
if request.method == "POST":
form = RegForm(request.POST)
if form.is_valid():
new_user = form.save(commit=False)
new_user.set_password(form.cleaned_data['password'])
new_user.save()
# add a query parameter to indicate user's first visit
return redirect(reverse('index') + "?first_visit=1")
else:
form = RegForm()
return render(request, 'first_ap/register.html', {'form': form})
- 注册成功后在重定向调用中添加一个查询参数
first_visit
为1(随机值)。 self.request.GET
使用dict访问查询参数- 根据值更改上下文值
first_visit
推荐阅读
- javascript - 闭包的外部和内部函数中的相同变量
- sql - 在水晶报表中抑制字段的条件
- qt - 如何使用 v3 rest api 从谷歌驱动器下载文件?
- eclipse-che - 如何向 eclipse che 添加新的语言支持
- angular - 对 Observable zip 订阅执行操作
- python-3.x - 如何获取与给定正则表达式匹配的所有 xpath?
- string - Python 3:保留没有 b' 的字符串
- docusignapi - DocuSign- 使用 DocuSignAPI 以电子方式盖章(盖章)PDF 文档
- apache-zookeeper - 如何使用 zkCli 从 ZooKeeper 访问受保护的 znode?
- c++ - 使用 VC141 将 high_resolution_clock::time_point 转换为 time_t