Antonio Melé

Django 2


Скачать книгу

      Una vez implementado el sistema de etiquetado en el blog, puede utilizarlo para hacer cosas interesantes con él. A través de las etiquetas, puede clasificar de forma muy específica el contenido del blog. Artículos de temas relacionados tendrán etiquetas comunes. Va a construir una funcionalidad para mostrar artículos similares según la cantidad de etiquetas en común. De esta forma, cuando un usuario lea un artículo, puede sugerirle leer otros con contenido relacionado.

      Para recuperar los artículos similares a otro artículo, es necesario realizar los siguientes pasos:

      1. Recuperar todas las etiquetas del artículo actual.

      2. Recuperar todos los artículos que contengan algunas de las etiquetas previamente recuperadas.

      3. Excluir el artículo actual de la lista anterior para evitar recomendar el mismo artículo.

      4. Ordenar los resultados por número de etiquetas en común con el artículo actual.

      5. En caso de que uno o más artículos contengan el mismo número de etiquetas, se recomienda el más reciente.

      6. Limitar la consulta al número de artículos que quiere recomendar.

      Estos pasos se trasladan a consultas complejas que incluirá en la vista post_detail. Va a editar el fichero views.py y añadir la siguiente línea de importación al comienzo del fichero:

Illustration

      Esta es la función de agregación Count del ORM de Django. Esta función permite realizar contabilizaciones agregadas de etiquetas. El módulo django.db.models incluye las siguientes funciones de agregación:

      • Avg: The value average

      • Max: The maximum value

      • Min: The minimum value

      • Count: The objects count

      Para profundizar sobre la agregación visita se recomienda visitar https://docs.djangoproject.com/en/2.0/topics/db/aggregation/.

      Añadirá las siguientes líneas dentro de la vista post_detail antes de la función render(), con el mismo nivel de indentación:

Illustration

      El código anterior funciona del siguiente modo:

      1. Se recupera una lista Python de identificadores de las etiquetas del artículo actual. El QuerySet values_list() devuelve tuplas con los valores de los campos especificados. Al pasar el parámetro flat=True, aplana la estructura, resultando: [1, 2, 3, ...].

      2. Se recuperan todos los artículos que contengan cualquiera de las etiquetas, excluyendo el artículo actual.

      3. Utilizará la agregación Count para generar un campo calculado (same_tags) que contiene el número de etiquetas compartidas de cada artículo con el actual.

      4. Se ordenan los resultados por número de etiquetas compartidas (orden descendente) y por el campo publish, para mostrar primero los artículos más recientes en caso de coincidir en número de etiquetas en común. Se limitará a recuperar solo los 4 primeros artículos.

      Añadirá el objeto similar_posts al contexto del diccionario de la función render() del siguiente modo:

Illustration

      Va ahora a editar la plantilla blog/post/detail.html y añadir el siguiente código antes de los comentarios del artículo:

Illustration

      Ahora nuestra página de detalle de artículo debería ser semejante a:

Illustration

      Ahora ya puede recomendar artículos a los usuarios. django-taggit también tiene un gestor, similar_objects(), que puede utilizar para recuperar objetos similares que contengan etiquetas en común. Para obtener más información sobre cómo funciona el gestor visite https://djangotaggit.readthedocs.io/en/latest/api.html.

      Como último detalle, también puede añadir la lista de etiquetas de la vista de detalle a la plantilla blog/post/list.html.

      En este capítulo ha aprendido cómo funcionan los formularios estándar de Django así como los formularios de modelo. Ha creado un sistema para compartir contenido del sitio web por email y otro para realizar comentarios. Añadió el etiquetado a los artículos del blog, integrando una aplicación, y construyó consultas complejas para recuperar objetos por similitud.

      En el siguiente capítulo aprenderá a crear filtros y etiquetas de plantilla personalizados. También construirá un mapa del sitio y creará contenido para el blog. Por último, implementará un sistema de búsqueda de texto.

      Конец ознакомительного фрагмента.

      Текст предоставлен ООО «ЛитРес».

      Прочитайте эту книгу целиком, купив полную легальную версию на ЛитРес.

      Безопасно оплатить книгу можно банковской картой Visa, MasterCard, Maestro, со счета мобильного телефона, с платежного терминала, в салоне МТС или Связной, через PayPal, WebMoney, Яндекс.Деньги, QIWI Кошелек, бонусными картами или другим удобным Вам способом.

/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAABkAAD/4QQMaHR0cDov L25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENl aGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4 OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjMtYzAxMSA2Ni4xNDU2NjEsIDIwMTIvMDIvMDYtMTQ6 NTY6MjcgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5 OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHht bG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0i aHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1sbnM6eG1w PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3Jn L2RjL2VsZW1lbnRzLzEuMS8iIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MkRBMzQzOEZEMEIw MTFFQTkxNENBNTJFQUZBNTJBNjciIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MkRBMzQzOEVE MEIwMTFFQTkxNENBNTJFQUZBNTJBNjciIHhtcDpDcmVhdG9yVG9vbD0iUFNjcmlwdDUuZGxsIFZl cnNpb24gNS4yLjIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0idXVpZDpm YzQyODNhMC04YWQxLTQ0MDMtYjE5Zi0wZDcyNjgxNGQyNjgiIHN0UmVmOmRvY3VtZW50SUQ9InV1 aWQ6MGI3MjRjOGEtNDFlNS00YzdmLWEyY2ItZmIwNWVkZTNlYTNiIi8+IDxkYzpjcmVhdG9yPiA8 cmRmOlNlcT4gPHJkZjpsaT5sbGR1cl8wMDA8L3JkZjpsaT4gPC9yZGY6U2VxPiA8L2RjOmNyZWF0 b3I+IDxkYzp0aXRsZT4gPHJkZjpBbHQ+IDxyZGY6bGkgeG1sOmxhbmc9IngtZGVmYXVsdCI+OTc4 MTc4ODQ3MjQ4N2Nvdl9PSy5pbmRkPC9yZGY6bGk+IDwvcmRmOkFsdD4gPC9kYzp0aXRsZT4gPC9y ZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIi Pz7/7QBIUGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAA8cAVoAAxslRxwCAAACAAIAOEJJTQQlAAAA AAAQ/OEfici3yXgvNGI0B1h36//uAA5BZG9iZQBkwAAAAAH/2wCEAAEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQECAgICAgICAgICAgMDAwMDAwMDAwMBAQEBAQEBAgEB AgICAQICAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA//A ABEIC7gJDgMBEQACEQEDEQH/xAGiAAAABgIDAQAAAAAAAAAAAAAHCAYFBAkDCgIBAAsBAAAGAwEB AQAAAAAAAAAAAAYFBAMHAggBCQAKCxAAAgEDBAEDAwIDAwMCBgl1AQIDBBEFEgYhBxMiAAgxFEEy IxUJUUIWYS