No necesita molestarse para crear slugs en Django. Implemente la generación automática de slug para ahorrar tiempo y agilizar su flujo de trabajo.

Como desarrollador web, es crucial optimizar la experiencia del usuario de su aplicación web. Para mejorar la experiencia del usuario y la visibilidad del motor de búsqueda, use URL fáciles de usar con slugs en Django. Crear URL con slugs es tan fácil como escribir una función, lo que le permite generar URL concisas y descriptivas que son fáciles de entender para los usuarios y los motores de búsqueda. Esto mejora la usabilidad y la accesibilidad al mismo tiempo que aumenta la clasificación en los motores de búsqueda.

Los ejemplos de código utilizados en este artículo se pueden encontrar en este repositorio GitHub.

Creando un Proyecto Django

Django proporciona varios métodos para generar slugs y usarlos en su sitio web. Para ilustrar diferentes formas de implementar slugs, este tutorial lo guiará a través de la creación de una aplicación web de blog simple.

instagram viewer

Antes de configurar un proyecto Django, crear y activar un entorno virtual para instalar las dependencias necesarias. Después de activar su entorno virtual, siga estos pasos para configurar su proyecto:

  • Instale Django usando el comando pip en su línea de comando:
pip instalar django
  • Cree un proyecto utilizando el django-admin utilidad. Este tutorial usará proyecto_núcleo como el nombre del proyecto.
django-admin startproject proyecto_núcleo.
  • Crear una aplicación llamada recetas.
python manage.py startapp recetas
  • Agregue su aplicación a las aplicaciones instaladas en su proyecto ajuste.py archivo.
APLICACIONES_INSTALADAS = [
'...'
'recetas',
]
  • Ejecute su aplicación escribiendo el siguiente comando en su herramienta de línea de comandos:
python manage.py servidor de ejecución
  • Navegar a http://127.0.0.1:8000/ en tu navegador. Deberías ver esta página:
  • Configure el patrón de URL en su proyecto urls.py archivo
de django.urls importar camino, incluir

patrones de URL = [
'...',
camino('', incluir('recetas.urls'))
]

Creando un Slug en Django

Para generar un slug en Django, debe incluir un campo de slug en sus modelos. Siga estos pasos para crear un slug en Django.

Crear un modelo

En tus modelos.py archivo, cree un nuevo modelo e incluya un campo slug. Aquí hay un ejemplo:

claseReceta(modelos. Modelo):
nombre = modelos. CharField (longitud_máxima=225, en blanco =FALSO, nulo=FALSO)
ingredientes = modelos. campo de texto (en blanco =FALSO, nulo=FALSO)
instrucciones = modelos. campo de texto (en blanco =FALSO, nulo=FALSO)
date_created = modelos. Campo de fecha y hora (auto_now=Verdadero)
babosa = modelos. SlugField (nulo = Verdadero, en blanco =Verdadero, único=Verdadero)

En el ejemplo anterior, el modelo Receta contiene un campo llamado babosa. El babosa campo tiene los atributos, nulo y blanco ajustado a Verdadero.

Aplicar migraciones a su modelo

Después de crear un modelo, debe ejecutar el siguiente comando en su herramienta de línea de comandos para crear la tabla en su base de datos:

python administrar.py hacer migraciones && python administrar.py migrar

El comando anterior primero generará un archivo de migración y luego actualizará la base de datos ejecutando las instrucciones dentro del archivo de migración.

Agregar datos a su base de datos

Registre su modelo escribiendo lo siguiente en su administrador.py archivo:

de django.contrib importar administración
de .modelos importar Receta

admin.site.register (Receta)

A continuación, abra su herramienta de línea de comandos y cree un superusuario para su panel de administración ejecutando este comando:

python manage.py crear superusuario

El comando anterior lo llevará a través de los pasos que se muestran en esta imagen:

Después de crear un superusuario, inicie su servidor local con el siguiente comando:

python manage.py servidor de ejecución

Una vez que su servidor se inicia, debe navegar a http://127.0.0.1:8000/admin/, inicia sesión con los detalles que usaste para crear un superusuarioy agregue manualmente algunas recetas a su base de datos. Debes prestar atención al campo de babosas.

Crear vistas para su aplicación

Abre tu vistas.py archivo y cree dos vistas para su aplicación. La primera vista simplemente mostrará una descripción general de sus recetas, mientras que la segunda le dará más detalles sobre cada receta. Puede utilizar estas vistas en su proyecto:

de django.atajos importar renderizar, get_object_or_404
de .modelos importar Receta

# Vista de lista para recetas
definitivamentereceta_lista(pedido):
recetas = Receta.objetos.todos()
devolver hacer (pedir, 'recetas/recipe_list.html', {"recetas":recetas})

# Vista detallada de cada receta
definitivamentereceta_detalle(solicitud, receta_slug):
receta = get_object_or_404(Receta, slug=receta_slug)
devolver hacer (pedir, 'recetas/recipe_detail.html', {'receta': receta})

En el fragmento de código anterior, el receta_lista view devuelve la lista de todas las recetas a la plantilla. Por otro lado, el receta_detalle view devuelve una sola receta a la plantilla. Esta vista toma un parámetro adicional llamado receta_slug que se utiliza para obtener el slug para una receta específica.

Configure patrones de URL para sus vistas

En el directorio de su aplicación (o receta carpeta), cree un archivo llamado urls.py para agregar rutas URL para su aplicación. Aquí hay un ejemplo:

de django.urls importar camino
de .puntos de vista importar receta_lista, receta_detalle

patrones de URL = [
camino('', lista_recetas, nombre='receta-casa'),
camino('receta//', detalle_receta, nombre='receta_detalle'),
]

En el fragmento de código anterior, la segunda ruta introduce el slug en la URL de la página.

Crea plantillas para tu aplicación

Para mostrar las recetas en el navegador, cree plantillas para sus vistas. Una plantilla debe ser para el receta_lista vista mientras que el otro debe ser para el receta_detalle vista. Para usar el slug en su plantilla, siga este formato, {% url 'view_name' receta.slug %}. Aquí hay dos ejemplos que puede usar en su código:

 recetas/recipe_list.html 
{% extiende 'base.html' %}

{% contenido del bloque %}
<h1clase="my-5 texto-centro">Recetash1>
<centro>
<ulclase="lista-grupo w-75">
{% para receta en recetas %}
<liclase="lista-grupo-elemento my-3">
<h2clase="mb-3">
<ahref="{% url 'recipe_detail' receta.slug %}">
{{ receta.nombre }}
a>
h2>
<pagclase="w-50">
Ingredientes: {{ receta.ingredientes }}
pag>
<pagclase="texto silenciado">
Creado: {{ receta.fecha_creada }}
pag>
li>
{% vacío %}
<liclase="lista-grupo-elemento">No se encontraron recetas.li>
{% endfor%}
ul>
centro>
{% bloque final %}

La plantilla HTML anterior enumerará todas las recetas en su base de datos y mostrará No se encontraron recetas si no hay recetas. Utiliza clases de Bootstrap para el estilo. Puedes aprender a usar Bootstrap con Django. La plantilla anterior debería verse así en el navegador:

 recetas/recipe_detail.html 
{% extiende 'base.html' %}

{% contenido del bloque %}
<centro>
<divisiónclase="w-75">
<h1clase="mt-5 mb-4">{{ receta.nombre }}h1>
<h3>Ingredientesh3>
<pag>{{ receta.ingredientes }}pag>
<h3>Instruccionesh3>
<pag>{{ receta.instrucciones }}pag>
<pagclase="texto silenciado">Creado: {{ receta.fecha_creada }}pag>
división>
centro>
{% bloque final %}

La plantilla HTML anterior devuelve detalles sobre una receta específica. En el navegador, la página anterior debería verse así:

Notará que la URL ahora contiene cualquier slug que haya agregado en su base de datos para cada receta. Si no comprende cómo funciona el sistema de plantillas, primero debe aprender herencia de plantilla en Django y Arquitectura MVT de Django.

Generar automáticamente un slug en Django

Con slugs, lo que realmente desea es generarlos automáticamente en función de un campo en su modelo. Para ello, debe modificar el ahorrar() en su modelo y especifique sus propias reglas antes de que los objetos se guarden en la base de datos. Aquí hay un ejemplo simple que puede agregar a su clase modelo:

# importar slugify
de django.template.defaultfilters importar slugificar

definitivamenteahorrar(yo, *args, **kwargs):
sino self.slug:
self.slug = slugify (self.nombre)
super().save(*args, **kwargs)

La función anterior primero verifica si existe un slug para el objeto modelo. Si no hay slug, usa el slugificar función para generar uno a partir del campo de nombre en el modelo. Después de anular el ahorrar() método, abra su panel de administración y agregue algunas recetas. Esta vez, no tiene que completar el campo de slug porque se completará automáticamente una vez que guarde su receta.

Si navega a la página de detalles de su receta recién agregada, verá que la URL usa el nombre de la receta como slug.

A veces, tendrá varias recetas con el mismo nombre y eso provocará errores en su slug. Puede solucionar esto agregando un elemento único a su slug, como la fecha de creación. Aquí hay un ejemplo simple:

self.slug = slugify (self.nombre + "-" + str (self.date_created))

Use Slugs para mejorar la experiencia de URL

A diferencia del buen viejo paquete, los slug brindan muchos beneficios, incluida la flexibilidad y la portabilidad, ya que no están vinculados a identificadores de URL específicos, como la clave principal. Por lo tanto, si cambia la estructura de su base de datos o migra sus datos, aún puede mantener direcciones URL consistentes. Las babosas también mejoran la facilidad de SEO.