我的用户菜单有一个问题。所以,我想,经过身份验证的用户可以在菜单中查看他/她的个人资料页面和注销(链接)。它在索引页面上工作(当我登录时): index,page1,profile,logout ,但是,如果我转到例如page1,我可以在菜单中看到: index,第1页,登录,而不是个人资料和注销。如何解决?
在网址:
url(r'^accounts/login/$', 'django.contrib.auth.views.login' ),
url(r'^accounts/logout/$', 'django.contrib.auth.views.logout_then_login' ),
url(r'^accounts/profile/$', 'my_app.views.profile' ),
在观点中:
def profile(request):
if not request.user.is_authenticated():
return HttpResponseRedirect("/accounts/login/")
else:
user = request.user.is_authenticated()
return render_to_response('profile.html',locals())
index.html的一部分:
{% if user.is_authenticated or request.user.is_authenticated %}
<li><a href="/accounts/profile/">Profile</a></li>
<li><a href="/accounts/logout/">logout</a></li>
{% else %}
<li><a href="/accounts/login/">login</a></li>
{% endif %}
的login.html:
{% extends "index.html" %}
{% load url from future %}
{% block application %}
{% if form.errors %}
<p>Try one more time</p>
{% endif %}
<form method="post" action="{% url 'django.contrib.auth.views.login' %}">
{% csrf_token %}
<table>
<tr>
<td>{{ form.username.label_tag }}</td>
<td>{{ form.username }}</td>
</tr>
<tr>
<td>{{ form.password.label_tag }}</td>
<td>{{ form.password }}</td>
</tr>
</table>
<input type="submit" value="Login" />
<input type="hidden" name="next" value="{{ next }}" />
</form>
{% endblock %}
profile.html:
{% extends "index.html" %}
{% block application %}
{% if request.user.is_authenticated %}
<p>Welcome, {{ request.user.username }}. Thanks for logging in.</p>
{% else %}
<p>Welcome, new user. Please log in.</p>
{% endif %}
{% endblock %}
page1.html:
{% extends "index.html" %}
{% block application %}
some for loops here
{% endblock %}
第1页的观点:
def car(request):
all_cars = Car.objects.all().filter(active=1).values('id', 'name')
return render_to_response('page1.html', {'all_cars': all_cars})
答案 0 :(得分:0)
始终添加context_instance
:
render_to_response('profile.html',locals(), context_instance=RequestContext(request))
答案 1 :(得分:0)
渲染模板时,您不必手动传递user
。试着这样做。
在 view.py :
中from django.contrib.auth.decorators import login_required
from django.shortcuts import render
@login_required
def profile(request):
return render(request, 'profile.html')
在 settings.py
中LOGIN_URL = '/accounts/login/'
在 index.html :
{% if user.is_authenticated %}
<li><a href="/accounts/profile/">Profile</a></li>
<li><a href="/accounts/logout/">logout</a></li>
{% else %}
<li><a href="/accounts/login/">login</a></li>
{% endif %}
在 profile.html
中{% extends "index.html" %}
{% block application %}
{% if user.is_authenticated %}
<p>Welcome, {{ user.username }}. Thanks for logging in.</p>
{% else %}
<p>Welcome, new user. Please log in.</p>
{% endif %}
{% endblock %}
在第1页视图中
from django.shortcuts import render
from django.contrib.auth.decorators import login_required
# If you want only authenticated users to access this page
@login_required
def car(request):
all_cars = Car.objects.all().filter(active=1).values('id', 'name')
return render(request, 'page1.html', {'all_cars': all_cars})
PS:我强烈建议您使用命名网址并使用网址名称 硬编码网址。