ejemplo:
1.ejemplo.com/nombredeusuario1
2.ejemplo.com/nombredeusuario2
quiero llevar al usuario a la página de edición de perfil, obtuve todos los permisos funcionando correctamente y configuré las vistas en consecuencia.
Mi problema:
Inicié sesión como nombre de usuario1, por lo que no debería poder acceder a example.com/username2/edit/ . Conseguí que esto funcionara en las vistas agregando algunos permisos, pero no quiero mostrar el botón de edición cuando el nombre de usuario1 registrado ve la página de nombre de usuario2. Ahora uso {% if user.is_authenticated %} y esto da como resultado que se muestre el botón de edición en la página de nombre de usuario2 aunque el usuario que ha iniciado sesión es el nombre de usuario1.
¿Alguna solución simple que se pueda usar en las plantillas directamente?
vistas.py
class CanEditMixin(object): def get_context_data(self, **kwargs): """ The method populates Context with can_edit var """ # Call the base implementation first to get a context context = super(CanEditMixin, self).get_context_data(**kwargs) #Update Context with the can_edit #Your logic goes here (something like that) if self.request.user.slug == self.kwargs['slug']: context['can_edit']=True else: context['can_edit']=False return context class ProfileView(CanEditMixin, UserPassesTestMixin, DetailView): .....
plantilla.html
{% if can_edit %} <a href="#">Edit</a> {% endif %}puede verificar si request.user es el mismo que el usuario al que está asignada la URL. En su solicitud, tiene una clave llamada 'usuario' que es su usuario registrado (si está registrado) o anónimo (si no está registrado).
{% if user.is_authenticated %} es para comprobar si el usuario está autenticado (como dice el nombre), es decir, si el usuario es un usuario válido (por ejemplo, hizo clic en el enlace del correo electrónico).