【问题标题】:Why is my URL not changing to my render template name?为什么我的 URL 没有更改为我的渲染模板名称?
【发布时间】:2018-08-15 05:48:54
【问题描述】:

我注意到登录后我的 URL 不正确。我怎样才能正确地做到这一点?

当前输出网址:

http://127.0.0.1:8000/login_user/

正确的输出 URL 必须是:

http://127.0.0.1:8000/

我怎样才能做到这一点?

login.html:

 <form class="form-horizontal" role="form" action="{% url 'ksvt:login_user'%}" method="post" enctype="multipart/form-data">
                    {% csrf_token %}
                    <div class="form-group">
                        <label class="control-label col-sm-2" for="id_username">
                            Username:
                        </label>
                        <div class="col-sm-10">
                            <input id="id_username" maxlength="30" name="username" type="text">
                        </div>
                    </div>
                    <div class="form-group">
                        <label class="control-label col-sm-2" for="id_password">
                            Password:
                        </label>
                        <div class="col-sm-10">
                            <input id="id_password" maxlength="30" name="password" type="password">
                        </div>
                    </div>
                    <div class="form-group">
                        <div class="col-sm-offset-2 col-sm-10">
                            <button type="submit" class="btn btn-success">Submit</button>
                        </div>
                    </div>
                </form>

urls.py

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

app_name = 'ksvt'

urlpatterns = [
    url(r'^$', views.IndexView.as_view(), name='index'),
    url(r'^register/$', views.register, name='register'),
    url(r'^login_user/$', views.LoginView.as_view(), name='login_user'),
    url(r'^logout_user/$', views.LogoutView.as_view(), name='logout_user'),
]

views.py

class LoginView(TemplateView):
template_name = 'ksvt/index.html'

def post(self, request):
    username = request.POST['username']
    password = request.POST['password']
    user = authenticate(username=username, password=password)
    if user is not None:
        if user.is_active:
            login(request, user)
            locations = Location.objects.all()
            return render(request, self.template_name, {'locations': locations})
        else:
            return render(request, self.template_name, {'error_message': 'Your account has been disabled'})
    else:
        return render(request, 'ksvt/login.html', {'error_message': 'Invalid login'})

【问题讨论】:

    标签: django django-templates django-views


    【解决方案1】:

    您只是在渲染中更改模板,这不会将您重定向到索引页面。要更改 url,如果用户通过身份验证,您需要在视图中返回 redirect 对象:

    if user is not None:
        if user.is_active:
            login(request, user)
            return redirect('index')
    

    【讨论】:

    • 谢谢@neverwalkaloner!我现在很清楚区别.. 非常感谢.. :)
    猜你喜欢
    • 1970-01-01
    • 2013-07-10
    • 1970-01-01
    • 2016-04-23
    • 2011-06-21
    • 1970-01-01
    • 2013-11-14
    • 2013-03-18
    相关资源
    最近更新 更多