entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

¿Mostrar solo el nombre de archivo en Django?

Saludos. Cómo hago para mostrar solamente los nombres de archivo?
Así se ve en el template:
enter image description here

En models.py está así:

class directorios(models.Model):
  def url(self,filename):
    ruta = "MultimediaData/proyectos/%s/%s"%(self.proyecto,str(filename))
    return ruta
  archivo   = models.FileField(upload_to=url,null=True,blank=True)
  proyecto = models.ForeignKey(proyecto)
  fecha     = models.DateTimeField(auto_now=True)

Cómo hacer para que se vea solamente el nombre de archivo y no la ruta path completa?

0voto

white comentado

podrias agregar la clase Proyecto y la vista que muestra el template que dices?

0voto

ibrames comentado

models.py

class proyecto(models.Model):

titulo  = models.CharField(max_length=100)
financiamiento = models.BooleanField(default=False)
#autor = models.ForeignKey(participantes)
metodo  = models.ForeignKey(metodos)
episteme    = models.ForeignKey(episteme)
universidad = models.ForeignKey(universidad)
linea = models.ForeignKey(lineas)
tutor = models.CharField(max_length=3, editable = False)

class Meta:
    unique_together = [("titulo", "metodo", "episteme", "universidad")]

def __str__(self):
    return self.titulo

views.py

def descargas_view(request,pagina,id_proyecto):

identidad=int(id_proyecto)
var = int(id_proyecto)
proy = proyecto.objects.filter(tutor=identidad)
directorio = directorios.objects.filter(proyecto=identidad)
nombre = proyecto.objects.get(id=identidad)

paginator = Paginator(directorio, 20)
try:
    page = int(pagina)
except:
    page = 1

try:
    proyec = paginator.page(page)

except (EmptyPage, InvalidPage):
    proyec = paginator.page(paginator.num_pages)
numero = directorios.objects.filter (proyecto = var).count()

ctx = {'proyecto': proyec,'nombre':nombre,'directorio':directorio,'var':var,'cant':numero}
return render_to_response('home/descargas.html', ctx, context_instance=RequestContext(request))

template.html

{% for p in directorio %}
    <tbody>
        <tr>
            <td>{{ p.archivo }} </td>
            <!-- <td>{{directorio.archivo}}</td> -->
            <td> {{p.fecha}} </td>

1 Respuesta

1voto

white Puntos75880

en tu archivo views.py antes de:

ctx = {'proyecto': proyec,'nombre':nombre,'directorio':directorio,'var':var,'cant':numero}

agrega esto:

for item in directorio:
    item.filename = os.path.split(item.archivo.name)[1]

no olvides importar:

import os

ahora en la plantilla utiliza p.filename:

{% for p in directorio %}
       {{ p.filename }}
{% endfor %}

otra opcion seria con filtros para templates, pero es mas agregar archivos, mas codigo, en fin. Mas largo.

como recomendacion final, deberias agregar una columna que contenga el nombre de archivo y otra que contenga la ruta.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta