¿Qué es una "babosa" en Django?

Cuando leo el código de Django, a menudo veo en los modelos lo que se llama un "slug". No estoy muy seguro de qué es esto, pero sé que tiene algo que ver con las URL. ¿Cómo y cuándo se supone que debe usarse esta cosa babosa?

(He leído su definición en este glosario.)

preguntado el 09 de enero de 09 a las 02:01

Para una comprensión instantánea, mire la URL del sitio en el que se encuentra: https://stackoverflow.com/questions/{id}/{slug} -

11 Respuestas

Un "slug" es una forma de generar una URL válida, generalmente utilizando datos ya obtenidos. Por ejemplo, una babosa usa el título de un artículo para generar una URL. Aconsejo generar el slug por medio de una función, dado el título (u otro dato), en lugar de configurarlo manualmente.

Un ejemplo:

<title> The 46 Year Old Virgin </title>
<content> A silly comedy movie </content>
<slug> the-46-year-old-virgin </slug>

Ahora supongamos que tenemos un modelo de Django como:

class Article(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField(max_length=1000)
    slug = models.SlugField(max_length=40)

¿Cómo haría referencia a este objeto con una URL y con un nombre significativo? Por ejemplo, podría usar Article.id para que la URL se vea así:

www.example.com/article/23

O bien, es posible que desee hacer referencia al título de esta manera:

www.example.com/article/The 46 Year Old Virgin

Dado que los espacios no son válidos en las URL, deben reemplazarse por %20, lo que resulta en:

www.example.com/article/The%2046%20Year%20Old%20Virgin

Ambos intentos no dan como resultado una URL muy significativa y fácil de leer. Esto es mejor:

www.example.com/article/the-46-year-old-virgin

En este ejemplo, the-46-year-old-virgin es una babosa: se crea a partir del título reduciendo todas las letras y reemplazando los espacios por guiones -.

También vea la URL de esta misma página web para ver otro ejemplo.

respondido 25 nov., 19:10

Buena descripción, pero para agregar: SlugField no garantiza la singularidad de fábrica, por lo que si lo usa de forma predeterminada, esta es una URL mejor: www.example.com/article/the-40-year-old-virgin/23 / Donde '23' es el article.id, y es lo que realmente se usa para hacer la consulta (también más rápido que consultar en el slug). - daniel naab

Encuentro www.example.com/article/23/the-40-year-old-virgin más fácil de leer. - miniquark

Si sirve contenido basado en la identificación, decida si debe verificar que el slug coincida con el contenido (y devolver 404 si no lo hace) o ignorarlo por completo. No creo que haya una regla general para lo que es mejor, en cuanto a SEO. SO seguirá mostrando esta página si ingresa stackoverflow.com/questions/427102/… en su navegador. - Tomás André

@Eno, realmente no debería haber necesidad de ocultar los ID de la base de datos; suponga que todas sus URL se conocen públicamente de todos modos. - Josh Smeton

@Eno, la babosa se agrega para SEO y para la bondad del enlace permanente. El ID se utiliza para búsquedas indexadas. El SEO para stackoverflow es brillante, y utilizan exactamente esta estrategia. Su argumento fue "ocultar la identificación de la base de datos", que ahora ha convertido en "SEO". ¿Qué te pasa? - Josh Smeton

Si puedo proporcionar algún contexto histórico:

El término "babosa" tiene que ver con la fundición de metal, plomo, en este caso, con el que se hicieron las fuentes de imprenta. Luego, cada papel tenía su fábrica de fuentes regularmente fundido y refundido en moldes nuevos, ya que después de muchas impresiones se desgastaban. Los aprendices como yo comenzaron su carrera allí y llegaron hasta la cima (ya no).

Las tipografías tenían que componer el texto de un artículo al revés con los caracteres principales apilados de manera inteligente. Entonces, al momento de imprimir, las letras estarían rectas sobre el papel. Todos los tipográficos podían leer el periódico reflejado tan rápido como el impreso. Por lo tanto, las babosas, (como caracoles) también las historias lentas (las últimas en ser arregladas) eran muchas en el banco esperando, identificadas únicamente por sus primeras letras, en su mayoría el título completo generalmente más legible. Allí, en el banquillo, esperaban algunas noticias "calientes", para una posible corrección de última hora, (Diario vespertino) antes del último montaje e impresión definitiva.

Django salió de las oficinas de la revista Lawrence en Kansas. Donde probablemente todavía persiste algo de jerga de imprenta. Un-entusiasta-de-django-y-amable-viejo-chico-babosa-de-Francia.

Respondido el 09 de enero de 18 a las 07:01

El término 'babosa' proviene del mundo de la producción de periódicos.

Es un nombre informal que se le da a una historia durante el proceso de producción. A medida que la historia se abre camino desde el reportero de ritmo (asumiendo que estos incluso existe ¿más?) hasta el editor hasta las "imprentas", este es el nombre por el que se hace referencia, por ejemplo, "¿Ha arreglado esos errores en la historia de 'kate-and-william'?".

Algunos sistemas (como Django) usan el slug como parte de la URL para ubicar la historia, un ejemplo es www.mysite.com/archives/kate-and-william.

Incluso Stack Overflow hace esto, con el GEB-ish(A) autorreferencial https://stackoverflow.com/questions/427102/what-is-a-slug-in-django/427201#427201, aunque puedes reemplazar la babosa con blahblah y todavía lo encontrará bien.

Incluso puede ser anterior a eso, ya que los guiones tenían "líneas de slug" al comienzo de cada escena, lo que básicamente establece el fondo para esa escena (dónde, cuándo, etc.). Es muy similar en que es un resumen o preámbulo de lo que sigue.

En una máquina Linotype, una babosa era una pieza de metal de una sola línea que se creaba a partir de las formas de las letras individuales. Al hacer una sola barra para toda la línea, esto mejoró enormemente la antigua composición carácter por carácter.

Aunque lo siguiente es pura conjetura, un significado temprano de babosa era para una moneda falsa (que tendría que presionarse de alguna manera). Podría imaginar que ese uso se transformaría en el término de impresión (ya que la babosa tuvo que presionarse usando los caracteres originales) y, a partir de ahí, cambiar de la definición de 'pieza de metal' a la definición de 'resumen de historia'. A partir de ahí, hay un pequeño paso desde la impresión adecuada hasta el mundo en línea.


(A) "Godel Escher, Bach", por uno Douglas Hofstadter, que yo (al menos) considero una de las grandes obras intelectuales modernas. También deberías ver su otro trabajo, "Metamagical Themas".

Respondido el 16 de diciembre de 19 a las 11:12

Slug es un término periodístico. Una slug es una etiqueta corta para algo, que contiene solo letras, números, guiones bajos o guiones. Generalmente se usan en URL. (como en los documentos de Django)

Un campo slug en Django se usa para almacenar y generar válidos URL para sus páginas web creadas dinámicamente.

Al igual que la forma en que agregó esta pregunta en Stack Overflow y se generó una página dinámica y cuando vea en la barra de direcciones, verá el título de su pregunta con "-" en lugar de los espacios. Ese es exactamente el trabajo de un campo de babosas.

Ingrese la descripción de la imagen aquí

El título que ingresaste era algo como esto -> ¿Qué es una “babosa” en Django?

Al almacenarlo en un campo slug, se convierte en "what-is-a-slug-in-django" (ver URL de esta página)

Respondido el 20 de junio de 20 a las 10:06

De aquí.

"Slug" es un término de los periódicos, pero lo que significa aquí es la parte final de la URL. Por ejemplo, una publicación con el título “Un poco sobre Django” se convertiría automáticamente en “bit-about-django” (puede, por supuesto, cambiarlo fácilmente si no le gusta el slug autogenerado).

Respondido el 09 de enero de 09 a las 04:01

Slug es una etiqueta corta compatible con URL para contenido específico. Solo contiene letras, números, guiones bajos o guiones. Las babosas se guardan comúnmente con el contenido respectivo y pasan como una cadena de URL.

Slug puede crear usando SlugField

por ejemplo:

class Article(models.Model):
    title = models.CharField(max_length=100)
    slug = models.SlugField(max_length=100)

Si desea usar el título como slug, django tiene una función simple llamada slugify

from django.template.defaultfilters import slugify

class Article(models.Model):
    title = models.CharField(max_length=100)

    def slug(self):
        return slugify(self.title)

Si necesita singularidad, agregue unique=True en campo de babosas.

por ejemplo, del ejemplo anterior:

class Article(models.Model):
    title = models.CharField(max_length=100)
    slug = models.SlugField(max_length=100, unique=True)

¿Eres vago para hacer el proceso de slug? no te preocupes, este complemento te ayudará. django-autoslug

Respondido el 14 de junio de 18 a las 11:06

Es una parte descriptiva de la URL que está ahí para hacerla más descriptiva humana, pero sin que necesariamente la requiera el servidor web, en ¿Qué es una "babosa" en Django? el slug es 'in-django-what-is-a-slug', pero el slug no se usa para determinar el página servida (en este sitio al menos)

contestado el 23 de mayo de 17 a las 13:05

También auto slug en django-admin. Agregado en ModelAdmin:

prepopulated_fields = {'slug': ('title', )}

Como aquí:

class ArticleAdmin(admin.ModelAdmin):
    list_display = ('title', 'slug')
    search_fields = ('content', )

    prepopulated_fields = {'slug': ('title', )}

Respondido el 21 de enero de 13 a las 12:01

lingote

Una etiqueta corta para algo, que contiene solo letras, números, guiones bajos o guiones. Generalmente se usan en URL. Por ejemplo, en una URL de entrada de blog típica:

https://www.djangoproject.com/weblog/2008/apr/12/spring/ el último bit (resorte) es la babosa.

Respondido 14 ago 18, 08:08

Es una forma de generar una URL válida, generalmente utilizando datos ya obtenidos. Por ejemplo, usar el título de un artículo para generar una URL.

Respondido el 04 de diciembre de 20 a las 09:12

En resumen, slug ayuda a deshacerse de esas URL de aspecto feo con URL válidas para ejemplos en un sitio ecommerec en lugar de mostrar la URL como www.myecom.com/product/5432156 puedo mostrarlo como www.myecom.com/product/iphone11 con la ayuda de slug

respondido 09 nov., 20:10

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.