передача информации в представления django с помощью перенаправления - PullRequest
0 голосов
/ 13 декабря 2018

Я пытаюсь передать следующую информацию через перенаправление (примечание: имя пользователя не является именем пользователя, использующим аутентификацию 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_]+)$']

Ответы [ 3 ]

0 голосов
/ 13 декабря 2018

Лучшим способом было бы использовать django.urls.reverse вот так -

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

# views.py
def view_func(request):
    # code
    return reverse('xyz', args=[], kwargs={})
0 голосов
/ 13 декабря 2018

Когда вы используете redirect, вы должны использовать **kwargs для URL-адресов kwargs, которые будут переданы reverse.Поэтому вы можете сделать:

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)
    ...
0 голосов
/ 13 декабря 2018

Вы должны отправить slug как аргумент, а не как словарь.

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