¿Qué es una "babosa" en Django?
Cuando leo el código de Django, a menudo veo en los modelos lo que se llama "slug". No estoy muy seguro de qué es esto, pero sí sé que tiene algo que ver con las URL. ¿Cómo y cuándo se supone que se debe utilizar esta babosa?
He leído su definición a continuación en este glosario :
Slug
Una etiqueta corta para algo, que contiene sólo letras, números, guiones bajos o guiones. Generalmente se utilizan 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.
Un "slug" es una forma de generar una URL válida, generalmente utilizando datos ya obtenidos. Por ejemplo, un slug utiliza el título de un artículo para generar una URL. Aconsejo generar el slug mediante 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ías referencia a este objeto con una URL y un nombre significativo? Por ejemplo, podrías usar Article.id para que la URL se vea así:
www.example.com/article/23
O quizás quieras 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 da como resultado:
www.example.com/article/The%2046%20Year%20Old%20Virgin
Ambos intentos no dan como resultado una URL muy significativa y fácil de leer. Esta es mejor:
www.example.com/article/the-46-year-old-virgin
En este ejemplo, the-46-year-old-virgin
es un slug: se crea a partir del título poniendo todas las letras en minúscula y reemplazando los espacios por guiones -
.
Consulte también la URL de esta misma página web para ver otro ejemplo.
Si se me permite proporcionar algún contexto histórico:
El término "babosa" tiene que ver con el metal fundido (plomo, en este caso) con el que se hicieron las fuentes de prensa. Luego, cada periódico tenía sus fuentes en su fábrica, fundidas periódicamente y refundidas 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).
Los tipográficos tenían que componer el texto de un artículo al revés con los caracteres principales apilados de forma ordenada. Entonces, en el momento de la impresión, las letras estarían rectas en 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 los caracoles) también las historias lentas (las últimas en ser arregladas) eran muchas en el banco esperando, identificadas únicamente por sus primeras letras, sobre todo el título completo en general más legible. Algunas noticias "calientes" aguardaban allí en el banco, para una posible corrección de última hora (Evening Paper) antes del último montaje y la impresión definitiva.
Django surgió de las oficinas del diario Lawrence en Kansas. Donde probablemente aún persiste algo de jerga tipográfica. Un viejo-baboso-entusiasta-y-amigable-de-django-de-Francia.
El término 'slug' proviene del mundo de la producción periodística.
Es un nombre informal que se le da a una historia durante el proceso de producción. A medida que la historia recorre su camino desde el reportero (¿suponiendo que ya existan ?) hasta el editor y las "imprentas", este es el nombre con el que se hace referencia, por ejemplo, "¿Ha corregido esos errores en el ' ¿La historia de Kate y William?".
Algunos sistemas (como Django) utilizan el slug como parte de la URL para localizar la historia, por ejemplo www.mysite.com/archives/kate-and-william
.
Incluso el propio Stack Overflow hace esto, con el autorreferencial GEB-ish (a)https://stackoverflow.com/questions/427102/what-is-a-slug-in-django/427201#427201
, aunque puedes reemplazar el slug con blahblah
y aún así lo encontrará bien.
Incluso puede ser anterior a eso, ya que los guiones tenían "líneas" al comienzo de cada escena, lo que básicamente establece el fondo de esa escena (dónde, cuándo, etc.). Es muy similar en el sentido de 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 letras individuales. Al hacer un solo slug 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 antiguo de slug era el de una moneda falsa (que tendría que ser presionada de alguna manera). Podría imaginar que ese uso se transformaría al término de impresión (ya que la bala tenía que presionarse usando los caracteres originales) y desde allí, cambiar de la definición de 'pieza de metal' a la definición de 'resumen de la historia'. A partir de ahí, hay un pequeño paso desde la impresión adecuada hasta el mundo online.
(a) "Godel Escher, Bach", de un tal Douglas Hofstadter , que yo (al menos) considero una de las grandes obras intelectuales modernas. También deberías ver su otro trabajo, "Metamagical Themas".