我正在使用Django 1.8.4和Django-registration-redux来处理用户注册。我的问题是:
当用户登录时,即詹姆斯,我想在工具栏中显示他的用户名。但问题是当我访问另一个用户的个人资料时,即。 mike,工具栏中的用户名也变为mike。这是绝对禁止的。
我在我的视图中以用户身份登录用户,以检查登录用户是否与当前访问过的用户个人资料相同。
我不确定是否应该阻止request.user更改不同的上下文或我的代码中存在问题:
urls.py
url(r'^users/(?P<slug>\w+)/$', UserProfileDetailView.as_view(), name="profile"),
views.py
class UserProfileDetailView(DetailView):
model = get_user_model()
slug_field = "username"
template_name = "user_detail.html"
def get_object(self, queryset=None):
user = super(UserProfileDetailView, self).get_object(queryset)
UserProfile.objects.get_or_create(user=user)
return user
base.html文件
{% if user.is_authenticated %}
<a href="{% url 'link_create' %}">Submit Link</a> |
<a href="{% url 'logout' %}">Logout</a> |
<a href="{% url 'profile' slug=user.username %}"><b>{{ user.username }}</b></a>
{% else %}
<a href="{% url 'registration_register' %}">Register</a> |
<a href="{% url 'login' %}">Login</a>
{% endif %}
user_detail.html
{% if object == request.user and request.user.is_authenticated %}
<p><a href='{% url "edit_profile" %}'>Edit My Profile</a></p>
{% endif %}
答案 0 :(得分:1)
您的上下文中有2个用户:
object
(或user
- DetailView
也会在小写的模型名称上返回当前对象)这是您正在查看的用户request.user
- 这是当前登录的用户您在工具栏中使用了user.name
而不是request.user.name
。这导致了问题。