反向''在视图之间传递和检索参数时没有找到参数

时间:2017-11-17 04:48:18

标签: python django redirect

Django版本:1.10 基本上我希望登录的用户使用自己的数据转到页面。 因此,当用户提供登录凭据时,通过传递' pk'重定向到其他页面。因此,该页面将只包含与该“pk'。

相关的数据。”

我在stackoverflow中看到过有关Reverse的其他帖子''没有找到任何参数,但我不知道为什么这对我没有用,所以任何见解和解决方案都受到高度赞赏

在主项目的urls.py中:

 urlpatterns = [
    url(r'^admin/', admin.site.urls,name='admin'),
    url(r'^basic_app/',include('basic_app.urls',namespace='basic_app')),]

我有一个名为basic-app的应用程序,其中包含urls.py为

 from django.conf.urls import url
 from basic_app import views

 app_name = 'basic_app'

 urlpatterns = [
         url(r'^login/$', views.user_login, name='user_login'),
         url(r'^class/(?P<pk>\d+)/$',views.ClassroomView,name='classroom_list'), ]

在views.py中,我有一个用户登录视图,应该将参数发送为

def user_login(request):

if request.method == 'POST':
    username = request.POST.get('username')
    password = request.POST.get('password')
    user = authenticate(username=username, password=password)
    if user:
        if user.is_active:
            login(request,user)
            # then send the user to Classroom view with 'pk' as parameter
            return redirect(reverse('basic_app:classroom_list'), {'pk': user.id})

我应该得到&#39; pk&#39;来自以下ClassroomView中的LoginView:

def ClassroomView(request,pk):

classroom_list = Classroom.objects\
                    .filter(school__user=User.objects.get(pk=request.session.get('user_id','0')))
class_dict = {'class_records': classroom_list}
return render(request, 'basic_app/classroom_list.html', context=class_dict)

但是,它说

Reverse for 'classroom_list' with no arguments not found. 1 pattern(s) tried: ['basic_app/class/(?P<pk>\\d+)/$']

并且,网址显示以下内容而没有&#39; pk&#39;

http://127.0.0.1:8000/basic_app/login/

问题,我认为是在返回redirect()。如果我只写下面的内容:     返回重定向(&#39; basic_app:classroom_list&#39;,{&#39; pk&#39;:user.id})

它出现以下错误:

NoReverseMatch at /basic_app/login/
Reverse for 'classroom_list' with arguments '({'pk': 2},)' not found. 1 pattern(s) tried: ['basic_app/class/(?P<pk>\\d+)/$']

那么,如何通过传递参数链接到下面的url?

url(r'^class/(?P<pk>\d+)/$',views.ClassroomView,name='classroom_list')

1 个答案:

答案 0 :(得分:2)

语法是:

reverse(viewname, urlconf=None, args=None, kwargs=None, current_app=None)

所以

return redirect(reverse('basic_app:classroom_list', kwargs={'pk': user.id}))