0

私が構築しているDjangoアプリでは、ユーザー作成プロセスを次のようにしたいと考えています。ユーザーがサインアップすると、有効な場合はリダイレクトされてLISTオブジェクトが作成され、有効な場合はダッシュボードになるものにリダイレクトされますLIST オブジェクトが作成されました。私のviews.pyは次のとおりです:

def user_signup(request):
    if request.method == 'POST':
        form = forms.UserSignupForm(data=request.POST)
        if form.is_valid():
            user = form.save()
            g = Group.objects.get(name='test_group')
            g.user_set.add(user)
            # log user in
            username = form.cleaned_data['username']
            password = form.cleaned_data['password1']
            user = authenticate(username=username, password=password)
            login(request, user)
            messages.success(request, u'Welcome to Social FollowUp')
            return redirect('user_create')
    else:
        form = forms.UserSignupForm()
    return TemplateResponse(request, 'user_signup.html', {
        'form': form,
    })

@login_required
@permission_required('')
def user_create(request):
    if request.method == 'POST':
        list_form = forms.ListForm(request.POST)
        if list_form.is_valid():
            list_create = list_form.save()
            messages.success(request, 'List {0} created'.format(list_create.list_id))
            return redirect('user_dashboard')
    else:
        list_form = forms.ListForm()

    return TemplateResponse(request, 'dashboard/create.html', {'list_form': list_form, })

def user_dashboard(request, list_id):
try:
    list_id = models.List.objects.get(pk=list_id)
except models.List.DoesNotExist:
    raise Http404
return TemplateResponse(request, 'dashboard/view.html', {'list_id': list_id})

これらのビューの urls.py は次のとおりです。

url(r'user/signup/$', views.user_signup, name='user_signup'),
url(r'u/dashboard/(?P<list_id>\d+)/$', views.user_dashboard, name='user_dashboard'),
url(r'u/list/create/$', views.user_create, name='user_create'),

プロセスを実行しようとすると、最初の 2 つのビューは正しく機能します。ただし、user_dashboard にリダイレクトすると、次のエラーが発生します。

Reverse for 'user_dashboard' with arguments '' and keyword arguments '{}' not found.

このサイト:

return redirect('user_dashboard')

これは list_id を渡さないことに関係していると思いますが、ハードコードされた値を渡そうとしても機能しませんでした (このように):

return redirect('user_dashboard', {'list_id': 2}) 

ここで何が間違っていますか?

4

1 に答える 1

3

試す:

return redirect(reverse('user_dashboard', args=(2,)))

あなたのコード

return redirect('user_dashboard')

あなたのURLパターンでは、あなたが持っているので動作しません

url(r'u/dashboard/(?P<list_id>\d+)/$', views.user_dashboard, name='user_dashboard'),

パラメータとして必要 です。list_id

于 2013-05-31T20:50:10.913 に答える