Django中如何在非当前用户个人资料页隐藏编辑按钮?
解决Django个人资料页仅当前用户可见编辑按钮的问题
1. 先修改视图函数
当前的profile视图没有传递要查看的用户信息,得调整成能接收用户名参数,拿到对应的用户和Profile对象后传给模板:
from django.shortcuts import get_object_or_404 from django.contrib.auth.models import User from .models import Profile from django.contrib.auth.decorators import login_required @login_required def profile(request, username): # 根据用户名获取目标用户,不存在则返回404页面 target_user = get_object_or_404(User, username=username) # 获取该用户关联的Profile target_profile = get_object_or_404(Profile, user=target_user) # 将目标用户、资料数据传给模板 return render(request, 'profile.html', { 'target_user': target_user, 'target_profile': target_profile })
同时要在urls.py里更新profile的路由,添加用户名参数:
path('profile/<str:username>/', views.profile, name='profile'),
2. 调整模板的显示逻辑
在模板里加条件判断,只有当前登录用户和页面所属用户是同一个时,才渲染编辑按钮:
{% if request.user == target_user %} <a class="btn btn-primary" href="{% url 'editprofile' %}" role="Edit">Edit Profile</a> {% endif %}
额外提醒
- 如果你的
editprofile视图需要处理特定用户的编辑,记得给编辑路由也加上参数,并且在视图里校验用户只能编辑自己的资料; - 用
get_object_or_404替代直接get,能避免输入不存在的用户名时直接抛出错误,体验更友好。
内容的提问来源于stack exchange,提问作者akira
相关产品推荐
相关产品推荐

