如果用户是工作人员,则除其个人资料详细信息外,他还将看到用户列表及其个人详细信息。如果没有,他只会看到他的个人资料详细信息。
models.py
class UserProfile(AbstractUser):
def __str__(self):
return self.username
def get_absolute_url(self):
return reverse("user_details", kwargs={"username":self.username})
views.py
def usersList(request):
"""
The list of all users
"""
if request.user.is_superuser:
users_list = UserProfile.objects.all()
elif request.user.is_staff:
users_list = UserProfile.objects.filter(is_staff=False)
else:
raise PermissionDenied
template = 'usermanager/users_list.html'
context = {
'users': users_list,
}
return render(request, template, context)
def userDetails(request, username):
"""
User details
"""
user_details = get_object_or_404(UserProfile, username=username)
template = 'usermanager/user_details.html'
context = {
'user_details': user_details,
}
return render(request, template, context)
urls.py
path('user-list/', views.usersList, name='users'),
path('<username>/', views.userDetails, name='user_details'),
users_list.html
{% for user in users %}
<h1>{{ user.username }}</h1>
<p>Name: {{ user.first_name }}</p>
<p>Surname: {{ user.last_name }}</p>
<p>Email: {{ user.email }}</p>
{% if request.user.is_superuser %}
{% if user.is_staff %}
<button class="btn btn-warning">Staff</button>
{% else %}
<button class="btn btn-primary">User</button>
{% endif %}
{% endif %}
<a class="btn btn-danger" href="{% url 'user_details' username=user.username %}">Details</a>
<hr>
{% endfor %}
user_details.html
{% if request.user == user %}
<h1>Your profile</h1>
{% else %}
<h1>Profile of {{ user.username }}</h1>
{% endif %}
<hr>
<div class="container">
<p>Name: {{ user.first_name }}</p>
<p>Surname: {{ user.last_name }}</p>
<p>Email: {{ user.email }}</p>
{% if request.user.is_superuser %}
{% if user.is_staff %}
<button class="btn btn-warning">Staff</button>
{% else %}
<button class="btn btn-primary">User</button>
{% endif %}
{% endif %}
<p>Joined: {{ user.date_joined }}</p>
<p>Last login: {{ user.last_login }}</p>
{% if user.is_active %}
<button class="btn btn-success">Active</button>
{% else %}
<button class="btn btn-secondary">Inactive</button>
{% endif %}
</div>
我可以正确看到所有用户的列表。 Bob 是我的用户之一,如果我单击他的详细信息,则会看到我的个人资料。所有用户的详细信息都会发生这种情况,我总是看到我的个人资料。我以超级用户身份登录。
我怎么了?
答案 0 :(得分:1)
您用于user_Details的对象是{{user_details}}
,因此您应该将其用作模板上的变量:
{% if request.user == user_details %}
等。那应该可以解决您的问题。
但是正如here in the docs所述,Django已经使用模板变量user
来让您看到实际的用户信息。
在用户列表模板中,您没有此问题,因为您正在用user
覆盖for
变量。
另一个建议是:避免在模板上覆盖user
变量。例如在您的users_list上:
{% for usr in users %}
<h1>{{ usr.username }}</h1>
<p>Name: {{ usr.first_name }}</p>
<p>Surname: {{ usr.last_name }}</p>
<p>Email: {{ usr.email }}</p>
{% if request.user.is_superuser %}
{% if usr.is_staff %}
<button class="btn btn-warning">Staff</button>
{% else %}
<button class="btn btn-primary">User</button>
{% endif %}
{% endif %}
<a class="btn btn-danger" href="{% url 'user_details' username=usr.username %}">Details</a>
<hr>
{% endfor %}
答案 1 :(得分:0)
这是我的愚蠢错误...
#include<stdio.h>
int main()
{
FILE *fp;
char c;
fp=fopen("random","w");
while((c=getchar())!=EOF)
{
putc(c,fp);
}
printf("no of character entered = %ld\n",ftell(fp));
fclose(fp);
}
的顶点是userDetails
,但我在模板内使用了user_details