¿Qué es una “babosa” en Django?

Cuando leo el código Django a menudo veo en los modelos lo que se llama “babosa”. 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 usa esta babosa?

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

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. Recomiendo generar el slug, usando una función, dado un título (u otro dato), en lugar de configurarlo manualmente.

Un ejemplo:

 The 46 Year Old Virgin   A silly comedy movie   the-46-year-old-virgin  

Ahora simulemos 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, con un nombre significativo? Puedes usar Article.id para que la URL se vea así:

 www.example.com/article/23 

O bien, podría hacer referencia al título así:

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

El problema es que los espacios no son válidos en las URL, deben reemplazarse por %20 cual es feo, por lo que es lo siguiente:

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

Eso no es resolver nuestra URL significativa. ¿No sería esto mejor?

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

Eso es una babosa. the-46-year-old-virgin . Todas las letras están borradas y los espacios son reemplazados por guiones - . ¡Vea la URL de esta página web para ver un ejemplo!

Si puedo proporcionar algún contexto histórico:

El término “babosa” tiene que ver con el lanzamiento de metales (plomo, en este caso, de los cuales se hicieron las fonts de prensa). Luego, cada papel tenía su fábrica de fonts regularmente fundida y refundida en moldes nuevos, ya que después de muchas impresiones se desgastaban. Aprendices como yo comenzaron su carrera allí, y llegaron hasta la cima (ya no más).

Los tipógrafos debían componer el texto de un artículo al revés con los caracteres principales astackdos de forma inteligente. Así que en el momento de la impresión las letras serían directamente en el papel. Todos los tipógrafos podían leer el periódico reflejado tan rápido como el impreso. Por lo tanto, las babosas, (como los caracoles) y también las historias lentas (las últimas en ser reparadas) eran muchas en la banca esperando, únicamente identificadas por sus primeras cartas, principalmente el título completo, generalmente más legible. Algunas “buenas” noticias esperaban en el banco, para una posible corrección de última hora, (periódico vespertino) antes del último assembly y la impresión definitiva.

Django surgió de las oficinas del diario Lawrence en Kansas. Donde probablemente aún persiste alguna jerga de impresión. A-django-entusiasta – y – amigable-viejo-slug-boy-from-France.

Como un poco de historia, el término ‘babosa’ proviene del mundo de la edición de periódicos.

Es el nombre informal dado a una historia durante el proceso de producción. A medida que la historia avanza por su tortuoso camino, desde el reportero hasta el editor hasta las “imprentas”, este es el nombre al que se hace referencia, por ejemplo, “¿Ha solucionado esos errores en la historia de ‘russia-cuts-europe-gas’? ? “.

Django lo usa como parte de la URL para ubicar la historia, un ejemplo es www.mysite.com/archives/russia-cuts-europe-gas .

Desde aqui

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

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

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

Al igual que la forma en que agregó esta pregunta en Stack Overflow y se genera 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.

Introduzca la descripción de la imagen aquí

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

Y

Al almacenarlo en un slug, lo archivó en what-is-a-a-slug-in-django (vea la URL de esta página)

Es una parte descriptiva de la URL que está ahí para hacerla más humana, pero sin ser necesariamente requerida por el servidor web. En ¿Qué es una “bala” en Django? el slug es ‘in-django-what-is-a-slug’, pero el slug no se usa para determinar la página servida (al menos en este sitio)

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

Slug puede crear usando SlugField

Ex:

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

Si quieres 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 el campo slug.

por ejemplo, del ejemplo anterior:

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

¿Eres perezoso para hacer el proceso de babosa? No te preocupes, este plugin te ayudará. django-autoslug

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', )} 

babosa

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

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