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

1voto

Cortar (truncate) un String en Django

Saludos. Tengo un modelo donde se crea un directorio en el discoduro. El modelo es el siguiente:

class proyecto(models.Model):
    titulo  = models.CharField(max_length=500)
    financiamiento = models.BooleanField(default=False)

    def __str__(self):
        return self.titulo

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)
   proyecto = models.ForeignKey(proyecto)

El problema: cuando en el modelo directorios, self.proyecto es un string que contiene más de 150 caracteres, genera un error en Windows, ya que no acepta directorios (carpetas) con más de 150 caracteres.
Necesidad: necesito que cuando en directorios se genere una carpeta con la función url, Django recorte el nombre de la carpeta resultante a un máximo de 150 caracteres.
Espero puedan ayudarme.
Muchas gracias.

1 Respuesta

1voto

white Puntos75880

En python puedes limitar una cadena de texto con la siguiente síntaxis:

cadena = cadena[0:20]

cadena tendria como límite 20 caracteres. si lo que deseas es cortarlo por la mitad puedes hacer uso de expresiones regulares.

re.sub(r'^(.{10}).*(.{10})$', '\g<1>_\g<2>', 'abcdefghijklmnopqrstuvwxyz')

resultado: abcdefghij_qrstuvwxyz

import re

def url(self,filename):
    path = re.sub(r'^(.{10}).*(.{10})$', '\g<1>_\g<2>', self.proyecto.titulo)
    ruta = "MultimediaData/proyectos/%s/%s"%(path , str(filename))
    return ruta

en django.utils.text dispones de la clase Truncator que pemite truncar texto, palabras, html y formatear nombres de archivo correctamente. get_valid_filename()

usando django.utils.text como solucion:

from django.utils.text import Truncator

def url(self,filename):
    path = Truncator(self.proyecto.titulo).chars(20, truncate = '___')
    ruta = "MultimediaData/proyectos/%s/%s"%(path , str(filename))
    return ruta

https://docs.djangoproject.com/en/1.7/_modules/django/utils/text/

0voto

ibrames comentado

Invaluable ayuda white... funcionó con Truncator, muchas gracias.

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