使用redi向Django视图传递信息

2024-03-28 11:17:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图通过重定向传递以下信息(注意:用户名是不是使用Django身份验证的用户名)。你知道吗

你知道吗视图.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

这是你的名字网址.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_]+)$']

Tags: pathnamepyifrequestdefdisplaypost
3条回答

必须将slug作为参数而不是字典发送。你知道吗

redirect('Display', slug=UserInfo.Username)

使用redirect时,应该使用**kwargs作为将传递给reverse的URL kwargs。因此,您可以:

return redirect('Display', **{'slug':UserInfo.Username})

或者简化为:

return redirect('Display', slug=UserInfo.Username)

在display视图中,可以使用slug从数据库中获取对象。你知道吗

from django.shortcuts import get_object_or_404

def Display(request,slug):
    user = get_object_or_404(UserInfo, Username=slug)
    ...

更好的方法是像这样使用django.urls.reverse

# urls.py
urlpatterns += ['hello/', views.view_func, name='xyz']

# views.py
def view_func(request):
    # code
    return reverse('xyz', args=[], kwargs={})

相关问题 更多 >