header Django 中的奇怪用户配置文件数据
Strange user profile data in header Django
我想做的是在 header 中,当我在菜单中输入不属于我自己的配置文件时,该用户的数据会显示在 header.但是当我进入时间线时,我的数据就出来了。这是我的代码。
models.py (Perfil)
class Perfil(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
avatar = models.ImageField(upload_to='avatar', default='avatar/default.png')
cabecera = models.ImageField(upload_to='cabecera', default='cabecera/default.png')
biografia = models.TextField(max_length=140, blank=True)
web = models.URLField(max_length=200, blank=True)
ubicacion = models.CharField(max_length=30, blank=True)
fecha_nacimiento = models.DateField(null=True, blank=True)
creado = models.DateTimeField(auto_now_add=True)
actualizado = models.DateTimeField(auto_now=True)
def __str__(self):
return self.user.username
class Conexion(models.Model):
seguidor = models.ForeignKey(User, related_name='seguidor')
siguiendo = models.ForeignKey(User, related_name='siguiendo')
fecha_seguimiento = models.DateTimeField(auto_now_add=True)
def __str__(self):
return "{} : {}".format(self.seguidor.username,self.siguiendo.username)
views.py (Perfil):
class PerfilDetailView(generic.DetailView):
model = User
slug_field = 'username'
template_name = 'perfil/perfil.html'
def get_context_data(self, **kwargs):
context = super(PerfilDetailView, self).get_context_data(**kwargs)
context['perfil'] = Perfil.objects.filter(user=self.get_object())
context['posts'] = Post.objects.filter(user=self.get_object())
context['siguiendo'] = Conexion.objects.filter(seguidor=self.get_object())
context['seguidores'] = Conexion.objects.filter(siguiendo=self.get_object())
return context
header.html(片段):
{% if user.is_authenticated %}
<ul class="nav navbar-nav">
<li {% url 'timeline_global' as home_url %}{% if request.get_full_path == home_url %}class="active"{% endif %}><a href="{% url 'timeline_global' %}"><span class="glyphicon glyphicon-home" aria-hidden="true"></span> Inicio</a></li>
<li><a href="#">Grupos</a></li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">{{ user.get_full_name }} <span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="{% url 'perfil' user.username %}">Perfil</a></li>
<li><a href="#">Opciones</a></li>
<li role="separator" class="divider"></li>
<li><a href="{% url 'desconectarse' %}">Desconectarse</a></li>
</ul>
</li>
<li><button type="button" class="btn btn-success navbar-btn" data-toggle="modal" data-target="#postNuevo"><span class="glyphicon glyphicon-edit" aria-hidden="true"></span></button></li>
</ul>
{% else %}
<ul class="nav navbar-nav navbar-right navbar-botones">
<li>
<form action="{% url 'login' %}">
<input type="submit" value="Iniciar Sesion" class="btn btn-primary navbar-btn navbar-boton"/>
</form>
</li>
<li>
<form action="/crearcuenta">
<input type="submit" value="Regístrate" class="btn btn-success navbar-btn navbar-boton"/>
</form>
</li>
</ul>
{% endif %}
这是解决方案,我与用户模型有冲突。我使用 context_object_name = 'usr'
并在我的用户配置文件模板中将所有名为 user 的标签更改为 usr.
views.py
class UserProfileDetailView(generic.DetailView):
model = User
slug_field = 'username'
template_name = 'perfil/perfil.html'
context_object_name = 'usr'
def get_context_data(self, **kwargs):
context = super(UserProfileDetailView, self).get_context_data(**kwargs)
context['posts'] = Post.objects.filter(user=self.get_object())
context['follower'] = Connection.objects.filter(follower=self.get_object())
context['following'] = Connection.objects.filter(following=self.get_object())
return context
模板用户配置文件:
{{ usr.userprofile.bio }}
模板Header:
{{ user.get_full_name }}
我想做的是在 header 中,当我在菜单中输入不属于我自己的配置文件时,该用户的数据会显示在 header.但是当我进入时间线时,我的数据就出来了。这是我的代码。
models.py (Perfil)
class Perfil(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
avatar = models.ImageField(upload_to='avatar', default='avatar/default.png')
cabecera = models.ImageField(upload_to='cabecera', default='cabecera/default.png')
biografia = models.TextField(max_length=140, blank=True)
web = models.URLField(max_length=200, blank=True)
ubicacion = models.CharField(max_length=30, blank=True)
fecha_nacimiento = models.DateField(null=True, blank=True)
creado = models.DateTimeField(auto_now_add=True)
actualizado = models.DateTimeField(auto_now=True)
def __str__(self):
return self.user.username
class Conexion(models.Model):
seguidor = models.ForeignKey(User, related_name='seguidor')
siguiendo = models.ForeignKey(User, related_name='siguiendo')
fecha_seguimiento = models.DateTimeField(auto_now_add=True)
def __str__(self):
return "{} : {}".format(self.seguidor.username,self.siguiendo.username)
views.py (Perfil):
class PerfilDetailView(generic.DetailView):
model = User
slug_field = 'username'
template_name = 'perfil/perfil.html'
def get_context_data(self, **kwargs):
context = super(PerfilDetailView, self).get_context_data(**kwargs)
context['perfil'] = Perfil.objects.filter(user=self.get_object())
context['posts'] = Post.objects.filter(user=self.get_object())
context['siguiendo'] = Conexion.objects.filter(seguidor=self.get_object())
context['seguidores'] = Conexion.objects.filter(siguiendo=self.get_object())
return context
header.html(片段):
{% if user.is_authenticated %}
<ul class="nav navbar-nav">
<li {% url 'timeline_global' as home_url %}{% if request.get_full_path == home_url %}class="active"{% endif %}><a href="{% url 'timeline_global' %}"><span class="glyphicon glyphicon-home" aria-hidden="true"></span> Inicio</a></li>
<li><a href="#">Grupos</a></li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">{{ user.get_full_name }} <span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="{% url 'perfil' user.username %}">Perfil</a></li>
<li><a href="#">Opciones</a></li>
<li role="separator" class="divider"></li>
<li><a href="{% url 'desconectarse' %}">Desconectarse</a></li>
</ul>
</li>
<li><button type="button" class="btn btn-success navbar-btn" data-toggle="modal" data-target="#postNuevo"><span class="glyphicon glyphicon-edit" aria-hidden="true"></span></button></li>
</ul>
{% else %}
<ul class="nav navbar-nav navbar-right navbar-botones">
<li>
<form action="{% url 'login' %}">
<input type="submit" value="Iniciar Sesion" class="btn btn-primary navbar-btn navbar-boton"/>
</form>
</li>
<li>
<form action="/crearcuenta">
<input type="submit" value="Regístrate" class="btn btn-success navbar-btn navbar-boton"/>
</form>
</li>
</ul>
{% endif %}
这是解决方案,我与用户模型有冲突。我使用 context_object_name = 'usr'
并在我的用户配置文件模板中将所有名为 user 的标签更改为 usr.
views.py
class UserProfileDetailView(generic.DetailView):
model = User
slug_field = 'username'
template_name = 'perfil/perfil.html'
context_object_name = 'usr'
def get_context_data(self, **kwargs):
context = super(UserProfileDetailView, self).get_context_data(**kwargs)
context['posts'] = Post.objects.filter(user=self.get_object())
context['follower'] = Connection.objects.filter(follower=self.get_object())
context['following'] = Connection.objects.filter(following=self.get_object())
return context
模板用户配置文件:
{{ usr.userprofile.bio }}
模板Header:
{{ user.get_full_name }}