在我的 Django 应用程序中。尽管传递了@login_required,但某些页面上不存在用户对象
in my Django app. user object is not existing on some pages despite passing @login_required
所以问题如下
我的应用程序页面很少。在顶部,我有带有标准 login/logout 的菜单和登录表单。这个菜单在我的 base.html 中是为了向您展示正确的选择,以防您已经登录/或尚未登录。
应用程序中的所有页面都受 @login_required
保护
base.html
<ul class ="nav navbar-nav navbar-right">
{% if request.user.is_authenticated %}
<li ><a href="{% url 'auth_logout' %}" %> {{user}} Logout </a></li>
{% else %}
<li ><a href="{% url 'registration_register' %}" %> Register </a></li>
{% endif %}
<li><div class="form">
{% if not request.user.is_authenticated and not "/accounts/login" in request.get_full_path %}
<form class='navbar-form navbar-right' method='POST' action='{% url "auth_login" %}'>{% csrf_token %}
<div class='form-group'>
<input type='text' class='form-control' name='username' placeholder='Username' />
</div>
<div class='form-group'>
<input type='password' class='form-control' name='password' placeholder='Password' />
</div>
<button type='submit' class='btn btn-default'>Login</button>
</form>
{% endif %}
</li>
</ul>
所以主要是当我调用我的列表页面时它工作完美,只有例外。
在这种情况下,它确实通过了@login_required 验证,但是用户对象在模板中不可见——因此它显示了错误的菜单选项
view.py
@login_required
def contact_list(request):
contact_list = ContactFilter(request.GET, queryset=Contacts.objects.all())
#return render_to_response('my_app/template.html', {'filter': filter})
#company_list = Company.objects.all()
paginator = Paginator(contact_list, 25) # Show 25 contacts per page
page = request.GET.get('page')
try:
contact = paginator.page(page)
except PageNotAnInteger:
# If page is not an integer, deliver first page.
contact = paginator.page(1)
except EmptyPage:
# If page is out of range (e.g. 9999), deliver last page of results.
contact = paginator.page(paginator.num_pages)
#return render(request, 'customer/company_list.html', {'company': company})
return render_to_response('customer/contact_list.html', {'contact': contact_list,'page_contact':contact })
我不认为 contact_list 模板与它有任何关系,所以我不会发布模板代码。
任何想法可能是什么原因?
谢谢
请使用 render 而不是 render_to_response。您没有向模板发送请求对象,因此 'request.user.is_authenticated' 将不起作用。
所以问题如下
我的应用程序页面很少。在顶部,我有带有标准 login/logout 的菜单和登录表单。这个菜单在我的 base.html 中是为了向您展示正确的选择,以防您已经登录/或尚未登录。 应用程序中的所有页面都受 @login_required
保护base.html
<ul class ="nav navbar-nav navbar-right">
{% if request.user.is_authenticated %}
<li ><a href="{% url 'auth_logout' %}" %> {{user}} Logout </a></li>
{% else %}
<li ><a href="{% url 'registration_register' %}" %> Register </a></li>
{% endif %}
<li><div class="form">
{% if not request.user.is_authenticated and not "/accounts/login" in request.get_full_path %}
<form class='navbar-form navbar-right' method='POST' action='{% url "auth_login" %}'>{% csrf_token %}
<div class='form-group'>
<input type='text' class='form-control' name='username' placeholder='Username' />
</div>
<div class='form-group'>
<input type='password' class='form-control' name='password' placeholder='Password' />
</div>
<button type='submit' class='btn btn-default'>Login</button>
</form>
{% endif %}
</li>
</ul>
所以主要是当我调用我的列表页面时它工作完美,只有例外。 在这种情况下,它确实通过了@login_required 验证,但是用户对象在模板中不可见——因此它显示了错误的菜单选项
view.py
@login_required
def contact_list(request):
contact_list = ContactFilter(request.GET, queryset=Contacts.objects.all())
#return render_to_response('my_app/template.html', {'filter': filter})
#company_list = Company.objects.all()
paginator = Paginator(contact_list, 25) # Show 25 contacts per page
page = request.GET.get('page')
try:
contact = paginator.page(page)
except PageNotAnInteger:
# If page is not an integer, deliver first page.
contact = paginator.page(1)
except EmptyPage:
# If page is out of range (e.g. 9999), deliver last page of results.
contact = paginator.page(paginator.num_pages)
#return render(request, 'customer/company_list.html', {'company': company})
return render_to_response('customer/contact_list.html', {'contact': contact_list,'page_contact':contact })
我不认为 contact_list 模板与它有任何关系,所以我不会发布模板代码。
任何想法可能是什么原因?
谢谢
请使用 render 而不是 render_to_response。您没有向模板发送请求对象,因此 'request.user.is_authenticated' 将不起作用。