我正在尝试通过重定向传递以下信息(注意:用户名不是使用Django身份验证的用户名)。
views.py
def SUserLoginFormView(request):
if request.method=='POST':
form1=SUserLoginForm(request.POST)
if form1.is_valid():
UserInfo=form1.save(commit=False)
return redirect('Display',{'slug':UserInfo.Username})
else:
form1=SUserLoginForm()
return render(request,'FormLoginTemplate.html',{'form1':form1})
def Display(request,slug):
pass
这是urls.py
urlpatterns=[
path('',views.CreateDiaryUserView,name='CreateDiaryUserView'),
path('Login',views.SUserLoginFormView,name='SUserLoginFormView'),
path('<slug:slug>',views.Display,name='Display'),
]
但是它无法正常显示
Reverse for 'Display' with arguments '({'slug': 'zjzcjzbhz'},)' not found. 1 pattern(s) tried: ['(?P<slug>[-a-zA-Z0-9_]+)$']
答案 0 :(得分:1)
使用redirect
时,应将**kwargs
用于将传递给reverse
的URL kwarg。因此,您可以执行以下操作:
return redirect('Display', **{'slug':UserInfo.Username})
或将其简化为:
return redirect('Display', slug=UserInfo.Username)
在显示视图中,您可以使用slug
从数据库中获取对象。
from django.shortcuts import get_object_or_404
def Display(request,slug):
user = get_object_or_404(UserInfo, Username=slug)
...
答案 1 :(得分:0)
您必须发送slug
作为参数而不是字典。
redirect('Display', slug=UserInfo.Username)
答案 2 :(得分:-1)
更好的方法是像这样使用django.urls.reverse
-
# urls.py
urlpatterns += ['hello/', views.view_func, name='xyz']
# views.py
def view_func(request):
# code
return reverse('xyz', args=[], kwargs={})