【问题标题】:Django won't change url on redirectDjango 不会在重定向时更改 url
【发布时间】:2017-10-25 03:05:40
【问题描述】:

注册后,我检查 user_type 并将用户移动到三个网页之一。

它显示了正确的页面布局,但 url 与注册页面保持一致。

EG:网址显示“http://127.0.0.1:8000/users/register/” 页面显示:“用户类型1信息”

我认为使用重定向应该更改 url,但它似乎不起作用。

views.py:

def register(request):

if request.method == 'POST':
    form = RegisterForm(data=request.POST)
    if form.is_valid():


 #       profile = form.save(commit=False)
 #       profile.user = request.user
 #       profile.save()

        user = form.save()
        profile = user.userprofile
        user_group = form.cleaned_data.get('user_type')
        profile.user_type = user_group
        profile.save()


      #  form.save()
        username = form.cleaned_data.get('username')
        password = form.cleaned_data.get('password1')
        user_group = form.cleaned_data.get('user_type')
        user = authenticate(username = username, password = password)
        login(request, user)

        print(user_group)
        print(type(user_group))

        if user_group == '1':
            return HttpResponseRedirect("/users/business/")
    #        return 
    #        HttpResponseRedirect('http://127.0.0.1:8000/users/business/')

    #           return HttpResponseRedirect(reverse('users:business'))
    #    return redirect(request, 'users/business.html')

        elif user_group == '2':
            return redirect(request, 'users/student.html')
        elif user_group == '3':
            return redirect(request, 'users/tourist.html')
    #    else:
     #       return redirect('main:index')
    else:
        print(RegisterForm.errors)

else:
    form = RegisterForm()


def business_view(request):
#    return redirect(request, 'users/business.html')
#    return HttpResponseRedirect('users/business.html')

#      return redirect('/users/business/')
  return redirect('users/business')

def student_view(request):
    return redirect(request, 'users/student.html')

def tourist_view(request):
    return redirect(request, 'users/tourist.html')

urls.py

urlpatterns = [
 # Login page 
  #url(r'^login/$', login, {'template_name': 'users/login.html'}, 
 name='login'),

url(r'^login/$', login, {'template_name': 'users/login.html'}, 
name='login'),

#url(r'^login/$', views.log_in, name='login'),



# Register page
url(r'^register/$', views.register, name='register'),


# Business page
#url(r'^business/$', views.business_view, name='business'),
url(r'^$',views.business_view),


# Student page
url(r'^student/$', views.student_view, name='student'),

# Tourist page 
url(r'^tourist/$', views.tourist_view, name = 'tourist'),

 ]

感谢您的帮助。

【问题讨论】:

  • 要不要在url后面加上.html

标签: python django


【解决方案1】:

仅在重定向参数中使用 urlname,即在学生页面上重定向使用 return redirect('student')(定义 URL 时定义的名称)。例如。

if user_group == '2':
      return redirect('student')

另外,在您想要显示 html 页面的视图中,请改用 render。例如。

from django.shorcuts import render
def student_view(request):
    return render(request, 'users/student.html')

【讨论】:

  • 哦,好吧,我最初也有 def student_view 作为渲染。最终改变它试图解决问题。有了这些更改,尽管我得到了一个异常类型:NoReverseMatch
  • 我得到了它:如果 user_group == '1': return HttpResponseRedirect(reverse('users:business')) 感谢您的帮助,非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-15
  • 2018-10-21
  • 2016-07-23
  • 1970-01-01
  • 1970-01-01
  • 2011-01-02
相关资源
最近更新 更多