verbose_name type slugify slugfield python django django-models slug

python - type - slug url django



¿Qué es una "babosa" en Django? (9)

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 ).


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 corregido esos errores en la historia de ''russia-cuts-europe-gas''? ? ".

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


Desde here

"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).


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. Recomendaría generar el slug, usando una función, dado un 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 simulemos que tenemos un modelo 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, necesitan ser reemplazados 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!


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)


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 fuentes de prensa). Luego, cada papel tenía su fábrica de fuentes 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 tenían que componer el texto de un artículo al revés con los caracteres principales apilados 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 montaje y la impresión definitiva.

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


Slug es un término periodístico. Una bala 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 URLs válidas para sus páginas web creadas dinámicamente.

Al igual que la forma en que agregó esta pregunta en 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.

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)


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 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.