He escrito el siguiente código, la url se está recuperando y está en el host host admin 127.0.0.1:8080/admin, pero no muestra la imagen de perfil en mi sitio web. Mi código es el siguiente en models.py

class UserProfile(models.Model):
    user = models.OneToOneField(User, related_name="profile")
    name = models.CharField(max_length=250, null=True, blank=True)
    profile_image = models.ImageField(upload_to = get_upload_file_name, null=True, blank=True)
    url=models.CharField(max_length=500,null=True,blank=True)
    def __str__(self):
        return u'%s profile' % self.user.username

En views.py

def home(request):
   context ={'request': request, 'user': request.user}
   return render(request,'home.html',context)

En home.html he escrito lo siguiente

{% extends 'base.html' %}
{% block main %}
 <div>
 <h1>authentication demo</h1>
 <p>
   <ul>
   {% if user and not user.is_anonymous %}
     <li>
       <a>Hello {{ user.get_full_name|default:user.username }}!</a>
     </li>


  <img src="{{ userprofile.url }}" alt="Some alt text">
 </p>
 </div>
{% endblock %}

La pregunta es qué debo agregar en html y cómo puedo llamar al objeto modelo.

0
Ujjwala Potluri 22 mar. 2017 a las 15:48

2 respuestas

La mejor respuesta

Primero debe get el objeto UserProfile como este:

# views.py

from django.shortcuts import get_object_or_404

def home(request):
    user_profile = get_object_or_404(UserProfile, user=request.user)
    context = {
        'request': request, 
        'user': request.user,
        'user_profile': user_profile,
    }
    return render(request, 'home.html', context)

Luego, en su archivo HTML, haga esto:

{% extends 'base.html' %}

{% block main %}
    <div>
        <h1>authentication demo</h1>
        <p>
            <ul> {% if user_profile and not user_profile.user.is_anonymous %}
                <li><a>Hello {{ user_profile.user.get_full_name|default:user.username }}!</a></li>
            <img src="{{ user_profile.profile_image.url }}" alt="Some alt text">
        </p>
    </div>
{% endblock %}
0
nik_m 22 mar. 2017 a las 13:17

Está intentando imprimir {{ userprofile.url }}, pero no hay ningún objeto userprofile en su contexto.

Debería poder acceder a través de su objeto user, utilizando profile related_name que utilizó en su modelo de perfil; asegúrese de utilizar también el campo de perfil correcto (profile_image, no url), y de utilizar propiedad url de ese campo:

<img src="{{ user.profile.profile_image.url }}" alt="Some alt text">
0
Chris 22 mar. 2017 a las 13:20