如何仅向Django中的帐户所有者显示个人资料编辑功能?

时间:2015-09-28 17:59:53

标签: python django django-templates django-registration

我正在使用Django 1.8.4构建一个网站,我使用django-registration-redux来处理用户登录和注销。

当所有用户都注销后,我手动输入用户的个人资料页面,其中包含用户信息和链接以编辑个人资料:

url(r'^users/(?P<slug>\w+)/$', UserProfileDetailView.as_view(), name="profile")

问题是,当我访问用户的页面(即/ users / james /)时,它将我识别为用户“james”登录(is_authenticated),并显示注销和编辑个人资料按钮,但它不应该'牛逼!它应该只显示公共信息。 (当我点击编辑按钮时,它会要求我输入登录信用,这样部分工作正常)

如何避免这种情况(显示来自随机登录或匿名用户的编辑个人资料,退出等)并仅将其显示给登录的帐户所有者?

viws.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

user_detail.html

<h2>{{ object.username }}'s Profile</h2>
{% if object.userprofile.bio %}
<div>
<b>Bio:</b>
{{ object.userprofile.bio }}
</div>
{% endif %}

{% if object.username == user.username and user.is_authenticated %}
    <p><a href='{% url "edit_profile" %}'>Edit My Profile</a></p>
{% endif %}

#footer
{% if user.is_authenticated %}
    <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 %}

1 个答案:

答案 0 :(得分:1)

&#34;用户&#34;模板的上下文中的变量被正在查看的当前记录覆盖。

尝试更改

{% if object.username == user.username and user.is_authenticated %}

{% if object == request.user and request.user.is_authenticated %}