{"id":573269,"date":"2025-06-05T05:40:22","date_gmt":"2025-06-05T04:40:22","guid":{"rendered":"https:\/\/blog.jetbrains.com\/?post_type=pycharm&#038;p=573269"},"modified":"2025-06-05T05:40:30","modified_gmt":"2025-06-05T04:40:30","slug":"la-guia-definitiva-de-las-plantillas-de-django","status":"publish","type":"pycharm","link":"https:\/\/blog.jetbrains.com\/es\/pycharm\/2025\/06\/la-guia-definitiva-de-las-plantillas-de-django\/","title":{"rendered":"La gu\u00eda definitiva de las plantillas de Django"},"content":{"rendered":"<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-573312 size-full\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/06\/PC-social-BlogFeatured-1280x720-2x-9.png\" alt=\"\" width=\"2559\" height=\"1439\" \/><\/figure>\n<p>Las plantillas de Django son una parte crucial del marco de trabajo. Entender qu\u00e9 son y por qu\u00e9 son \u00fatiles puede ayudarle a construir plantillas fluidas, adaptables y funcionales para sus webs y aplicaciones <a href=\"https:\/\/blog.jetbrains.com\/pycharm\/2023\/11\/what-is-the-django-web-framework\/\" data-type=\"link\" data-id=\"https:\/\/www.jetbrains.com\/pycharm\/web-development\/django\/\">Django<\/a>.<\/p>\n<p>Si es nuevo en el marco de trabajo y va a configurar su primer <a href=\"https:\/\/www.jetbrains.com\/help\/pycharm\/creating-and-running-your-first-django-project.html\" target=\"_blank\" rel=\"noopener\">proyecto Django<\/a>, es esencial que comprenda las plantillas. En esta gu\u00eda, encontrar\u00e1 todo lo que tiene que conocer sobre las plantillas de Django, incluidos los diferentes tipos y c\u00f3mo utilizarlos.<\/p>\n<h2 class=\"wp-block-heading\">\u00bfQu\u00e9 son las plantillas de Django?<\/h2>\n<p>Las <a href=\"https:\/\/www.jetbrains.com\/help\/pycharm\/templates.html\" target=\"_blank\" rel=\"noopener\">plantillas de Django<\/a> son una parte fundamental del marco de trabajo Django. Le permiten separar la presentaci\u00f3n visual de su sitio web del c\u00f3digo subyacente. Una plantilla contiene las partes est\u00e1ticas del resultado HTML que desea y una sintaxis especial que describe c\u00f3mo se insertar\u00e1 el contenido din\u00e1mico.<\/p>\n<p>En \u00faltima instancia, las plantillas pueden generar p\u00e1ginas web completas, mientras que las consultas a la base de datos y otras tareas de procesamiento de datos son gestionadas por <a href=\"https:\/\/blog.jetbrains.com\/pycharm\/2025\/01\/django-views\/\" data-type=\"link\" data-id=\"https:\/\/blog.jetbrains.com\/pycharm\/2025\/01\/django-views\/\">vistas<\/a> y <a href=\"https:\/\/docs.djangoproject.com\/en\/5.1\/topics\/db\/models\/\" target=\"_blank\" rel=\"noopener\">modelos<\/a>. Esta separaci\u00f3n asegura un c\u00f3digo limpio y f\u00e1cil de mantener, puesto que conserva la l\u00f3gica empresarial HTML separada del c\u00f3digo Python en el resto de su proyecto Django. Sin plantillas, tendr\u00eda que incrustar HTML directamente en su c\u00f3digo Python, lo que dificultar\u00eda su lectura y depuraci\u00f3n.<br \/><iframe loading=\"lazy\" title=\"Django Templates in 3 Minutes: A Quick Guide to Template Creation\" src=\"https:\/\/www.youtube.com\/embed\/EfSGuO4tVu4\" width=\"840\" height=\"473\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\"><\/iframe><br \/>Este es un ejemplo de plantilla Django que contiene algo de HTML, una variable <code>name<\/code> y l\u00f3gica <code>if\/else<\/code> b\u00e1sica:<\/p>\n<h1>Welcome!<\/h1>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"html\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\n\n\n{% if name %}<\/pre>\n<h1>Hello, {{ name }}!<\/h1>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"html\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\n{% else %}<\/pre>\n<h1>Hello, Guest!<\/h1>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"html\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\n{% endif %}<\/pre>\n<h1>{{ heading }}<\/h1>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"html\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\u00a0<\/pre>\n<h3 class=\"wp-block-heading\">Ventajas de utilizar plantillas<\/h3>\n<p>Los desarrolladores utilizan plantillas de Django para crear aplicaciones fiables de forma r\u00e1pida y eficiente. Otras ventajas clave de las plantillas son:<\/p>\n<ul>\n<li><strong>Reutilizaci\u00f3n del c\u00f3digo<\/strong>: se pueden crear componentes y dise\u00f1os reutilizables para mantener la coherencia entre p\u00e1ginas y aplicaciones.<\/li>\n<li><strong>Mantenimiento m\u00e1s sencillo<\/strong>: la apariencia de las p\u00e1ginas web puede modificarse sin alterar la l\u00f3gica subyacente.<\/li>\n<li><strong>Mejora de la legibilidad:<\/strong> el c\u00f3digo HTML puede mantenerse limpio y comprensible sin necesidad de una l\u00f3gica compleja.<\/li>\n<li><strong>Herencia de plantillas<\/strong>: se pueden definir estructuras y dise\u00f1os comunes para reducir la duplicaci\u00f3n y promover la coherencia.<\/li>\n<li><strong>Contenido din\u00e1mico<\/strong>: se pueden crear p\u00e1ginas web personalizadas que se adapten a las entradas de los usuarios y a las variaciones de los datos.<\/li>\n<li><strong>Optimizaci\u00f3n del rendimiento<\/strong>: las plantillas pueden almacenarse en cach\u00e9 para mejorar el rendimiento de la aplicaci\u00f3n o del sitio web.<\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\">Retos y limitaciones<\/h3>\n<p>Aunque las plantillas son esenciales para renderizar p\u00e1ginas web en Django, deben utilizarse con cuidado, especialmente en proyectos complejos con conjuntos de datos m\u00e1s grandes. A pesar de la relativa simplicidad del lenguaje de plantillas de Django, las plantillas demasiado complejas con numerosas etiquetas anidadas, filtros y herencia pueden llegar a ser dif\u00edciles de gestionar y mantener. En lugar de introducir demasiada l\u00f3gica en sus plantillas, intente que se centren en la presentaci\u00f3n. Las opciones de personalizaci\u00f3n tambi\u00e9n son limitadas, a menos que cree sus propias etiquetas o filtros personalizados.<\/p>\n<p>Migrar a un motor de plantillas diferente puede ser un reto, ya que el motor predeterminado de Django est\u00e1 estrechamente ligado al <a href=\"https:\/\/blog.jetbrains.com\/pycharm\/2023\/11\/what-is-the-django-web-framework\/\">marco de trabajo<\/a>. Sin embargo, cambiar a una alternativa como Jinja es relativamente sencillo, y trataremos esta posibilidad m\u00e1s adelante en esta gu\u00eda.<\/p>\n<h3 class=\"wp-block-heading\">Depuraci\u00f3n de plantillas de Django<\/h3>\n<p>En algunas situaciones (como cuando surgen problemas), puede ser \u00fatil ver c\u00f3mo funciona su plantilla. Para ello, puede utilizar la depuraci\u00f3n de plantillas.<\/p>\n<p>La depuraci\u00f3n de plantillas se centra en identificar errores en la forma en que interact\u00faan su HTML y los datos din\u00e1micos. Entre los problemas m\u00e1s comunes se incluyen variables que faltan, etiquetas de plantilla incorrectas y errores de l\u00f3gica.<\/p>\n<p>Por suerte, Django proporciona herramientas \u00fatiles como <code>{{ debug }}<\/code> para inspeccionar sus plantillas y p\u00e1ginas de error detalladas que resaltan d\u00f3nde est\u00e1 el problema. Esto facilita la localizaci\u00f3n y resoluci\u00f3n de problemas, para garantizar que sus plantillas se renderizan como se espera.<\/p>\n<h2 class=\"wp-block-heading\">Comprender el lenguaje de plantillas de Django (Django Template Language, DTL)<\/h2>\n<p>El DTL es el motor de plantillas integrado de Django, dise\u00f1ado para simplificar la creaci\u00f3n de p\u00e1ginas web din\u00e1micas. Combina a la perfecci\u00f3n HTML con etiquetas y filtros espec\u00edficos de Django, para que pueda generar contenidos ricos y basados en datos directamente desde su <a href=\"https:\/\/blog.jetbrains.com\/pycharm\/2023\/04\/create-a-django-app-in-pycharm\/\">aplicaci\u00f3n Django<\/a>. Exploremos algunas de las caracter\u00edsticas clave que hacen de DTL una potente herramienta para crear plantillas.<\/p>\n<h3 class=\"wp-block-heading\">Sintaxis y estructura b\u00e1sicas del DTL<\/h3>\n<p>Las plantillas de Django se escriben con una combinaci\u00f3n de sintaxis DTL y HTML. La estructura b\u00e1sica de una plantilla Django consiste en marcado HTML con etiquetas y variables Django integradas.<\/p>\n<p>Aqu\u00ed vemos un ejemplo:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"html\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\n  \n    <\/pre>\n<h1>{{ heading }}<\/h1>\n<ul>{% for item in item_list %}\n<li>{{ item.name }}<\/li>\n{% endfor %}<\/ul>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"html\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\n  \n<\/pre>\n<h3 class=\"wp-block-heading\">Variables, filtros y etiquetas<\/h3>\n<p>El DTL dispone de varias funciones para trabajar con variables, filtros y etiquetas:<\/p>\n<ul>\n<li><strong>Variables<\/strong>: las variables muestran datos din\u00e1micos en las plantillas. Se encierran entre llaves dobles, por ejemplo <code>{{ variable_name }}<\/code>.<\/li>\n<li><strong>Filtros<\/strong>: los filtros modifican o formatean el valor de una variable antes de renderizarla. Se aplican utilizando una barra vertical ( | ), por ejemplo, <code>{{ variable_name|upper }}<\/code>.<\/li>\n<li><strong>Etiquetas<\/strong>: las etiquetas controlan la l\u00f3gica y el flujo de las plantillas. Aparecen entre bloques <code>{% %}<\/code> y pueden realizar diversas operaciones como bucles, condicionales e inclusiones de plantillas.<\/li>\n<\/ul>\n<p><a href=\"https:\/\/www.jetbrains.com\/pycharm\/web-development\/django\/\" target=\"_blank\" rel=\"noopener\">PyCharm<\/a>, un IDE profesional para el desarrollo en Django, simplifica el trabajo con plantillas de Django proporcionando resaltado de sintaxis, que codifica por colores etiquetas, variables y HTML para una mejor legibilidad. Tambi\u00e9n ofrece detecci\u00f3n de errores en tiempo real, lo que garantiza que no se le escapen etiquetas de cierre ni se equivoque en la sintaxis. Con el autocompletado de variables y etiquetas, codificar\u00e1 m\u00e1s r\u00e1pido y con menos errores.<\/p>\n<figure class=\"wp-block-video\"><video src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/02\/1.mov\" controls=\"controls\" width=\"300\" height=\"150\"><\/video><\/figure>\n<div class=\"buttons\">\n<div class=\"buttons__row\"><a class=\"btn\" href=\"https:\/\/www.jetbrains.com\/pycharm\/web-development\/django\/\" target=\"\" rel=\"noopener\">Comience con PyCharm Pro de forma gratuita<\/a><\/div>\n<\/div>\n<h3 class=\"wp-block-heading\">Herencia de plantillas y ampliaci\u00f3n de plantillas base<\/h3>\n<p>El sistema de herencia de plantillas del marco de trabajo le permite crear una plantilla base que contiene la estructura est\u00e1ndar y el dise\u00f1o de su sitio web o aplicaci\u00f3n.<\/p>\n<p>A continuaci\u00f3n, puede crear plantillas secundarias que hereden de la plantilla base y anulen bloques espec\u00edficos de secciones seg\u00fan sea necesario. Esto fomenta la reutilizaci\u00f3n del c\u00f3digo y la coherencia entre sus diferentes plantillas.<\/p>\n<p>Para crear una plantilla base, defina bloques utilizando la etiqueta <code>{% block %}<\/code>:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"html\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"><!-- base.html -->\n\n\n  \n    \n  \n  \n    {% block content %}\n    {% endblock %}\n  \n<\/pre>\n<p>A continuaci\u00f3n, las plantillas secundarias ampl\u00edan las plantillas base y anulan determinados bloques:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"html\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"><!-- child_template.html -->\n{% extends 'base.html' %}\n\n{% block title %}My Page Title{% endblock %}\n\n{% block content %}<\/pre>\n<h1>My Page Content<\/h1>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"html\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\n  \nThis is the content of my page.\n{% endblock %}<\/pre>\n<h2 class=\"wp-block-heading\">Etiquetas de plantilla Django<\/h2>\n<p>Las etiquetas son un elemento esencial de las plantillas de Django. Proporcionan diversas funcionalidades, desde el renderizado condicional y la creaci\u00f3n de bucles hasta la herencia e inclusi\u00f3n de plantillas.<\/p>\n<p>Explor\u00e9moslas con m\u00e1s detalle.<\/p>\n<h3 class=\"wp-block-heading\">Etiquetas habituales de las plantillas de Django<\/h3>\n<p>Hay varias etiquetas de plantilla en Django, pero estas son las que probablemente utilizar\u00e1 con m\u00e1s frecuencia:<\/p>\n<ul>\n<li><code>{% if %}<\/code>: esta etiqueta le permite renderizar condicionalmente el contenido bas\u00e1ndose en una condici\u00f3n espec\u00edfica. Se utiliza a menudo con las etiquetas <code>{% else %}<\/code> y <code>{% elif %}<\/code>.<\/li>\n<li><code>{% for %}<\/code>: la etiqueta <code>{% for %}<\/code> se utiliza para iterar sobre una secuencia, como una lista o un conjunto de consultas, y mostrar el contenido de cada elemento de la secuencia.<\/li>\n<li><code>{% include %}<\/code>: esta etiqueta le permite incluir el contenido de otro archivo de plantilla dentro de la plantilla actual. Facilita la reutilizaci\u00f3n de fragmentos de plantilla comunes en varias plantillas.<\/li>\n<li><code>{% block %}<\/code>: la etiqueta <code>{% block %}<\/code> se utiliza junto con la herencia de plantillas. Define un bloque de contenido que puede ser anulado por las plantillas secundarias al ampliar una plantilla base.<\/li>\n<li><code>{% extends %}<\/code>: esta etiqueta especifica la plantilla base de la plantilla actual desde la que debe heredar.<\/li>\n<li><code>{% url %}<\/code>: esta etiqueta se utiliza para generar una URL para un patr\u00f3n de URL con nombre en su proyecto Django. Ayuda a mantener sus plantillas desacopladas de las rutas URL reales.<\/li>\n<li><code>{% load %}<\/code>: la etiqueta <code>{% load %}<\/code> se utiliza para cargar etiquetas y filtros de plantilla personalizados desde un m\u00f3dulo o biblioteca de Python, lo que le permite ampliar la funcionalidad del sistema de plantillas de Django.<\/li>\n<\/ul>\n<p>Estos son solo algunos ejemplos de las muchas etiquetas de plantilla disponibles en Django. Etiquetas como <code>{% with %}<\/code>, <code>{% cycle %}<\/code> o <code>{% comment %}<\/code>, entre otras, pueden proporcionar funcionalidades adicionales para proyectos avanzados, y le ayudar\u00e1n a crear aplicaciones personalizadas y eficientes.<\/p>\n<h3 class=\"wp-block-heading\">Uso de etiquetas de plantilla<\/h3>\n<p>Aqu\u00ed tiene un ejemplo detallado de c\u00f3mo puede utilizar las etiquetas en una plantilla Django:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"html\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{% extends 'base.html' %}\n{% load custom_filters %}\n\n{% block content %}<\/pre>\n<h1>{{ page_title }}<\/h1>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"html\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\n  {% if object_list %}<\/pre>\n<ul>{% for obj in object_list %} <!-- We truncate the object name to 25 characters. -->\n<li>{{ obj.name|truncate:25 }}<\/li>\n{% endfor %}<\/ul>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"html\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\n  {% else %}\n    \nNo objects found.\n  {% endif %}\n\n  {% include 'partials\/pagination.html' %}\n{% endblock %}<\/pre>\n<p>En este ejemplo, ampliamos una plantilla base, cargamos filtros personalizados y, a continuaci\u00f3n, definimos un bloque para el contenido principal.<\/p>\n<p>Dentro del bloque, comprobamos si existe una <code>object_list<\/code> y, en caso afirmativo, la recorremos en bucle y mostramos los nombres truncados de cada objeto. Mostramos un mensaje \u00abNo objects found\u00bb si la lista est\u00e1 vac\u00eda.<\/p>\n<p>Por \u00faltimo, incluimos una plantilla parcial para la paginaci\u00f3n. Esta plantilla es un fragmento reutilizable de HTML que se puede incluir en otras plantillas, lo que le permitir\u00e1 gestionar y actualizar elementos comunes (como la paginaci\u00f3n) de forma m\u00e1s eficaz.<\/p>\n<h2 class=\"wp-block-heading\">Plantillas de administraci\u00f3n de Django<\/h2>\n<p>La interfaz de administraci\u00f3n integrada de Django le ofrece una forma f\u00e1cil e intuitiva de gestionar los datos de su aplicaci\u00f3n. Se nutre de un conjunto de plantillas que definen su estructura, dise\u00f1o y apariencia.<\/p>\n<h3 class=\"wp-block-heading\">Funcionalidad<\/h3>\n<p>Las plantillas de administraci\u00f3n de Django se encargan de varias tareas:<\/p>\n<ul>\n<li><strong>Autenticaci\u00f3n<\/strong>: controla la autenticaci\u00f3n, el inicio y el cierre de sesi\u00f3n de los usuarios.<\/li>\n<li><strong>Gesti\u00f3n de modelos<\/strong>: muestra listas de instancias de modelos y crea, edita y elimina instancias seg\u00fan sea necesario.<\/li>\n<li><strong>Renderizado de formularios<\/strong>: renderiza formularios para crear y editar instancias del modelo.<\/li>\n<li><strong>Navegaci\u00f3n<\/strong>: renderiza la estructura de navegaci\u00f3n de la interfaz de administraci\u00f3n, incluidos el men\u00fa principal y los submen\u00fas espec\u00edficos de la aplicaci\u00f3n.<\/li>\n<li><strong>Paginaci\u00f3n<\/strong>: renderiza los controles de paginaci\u00f3n cuando se muestran listas de instancias del modelo.<\/li>\n<li><strong>Seguimiento del historial<\/strong>: muestra y gestiona el historial de cambios de las instancias del modelo.<\/li>\n<\/ul>\n<p>Las plantillas de administraci\u00f3n integradas de Django son una base s\u00f3lida para gestionar los datos de su aplicaci\u00f3n.<\/p>\n<h3 class=\"wp-block-heading\">Personalizaci\u00f3n de las plantillas de administraci\u00f3n<\/h3>\n<p>Aunque las plantillas de administraci\u00f3n de Django ofrecen una interfaz buena y funcional desde el momento de su instalaci\u00f3n, puede que desee personalizar su apariencia o comportamiento para adaptarse a las necesidades espec\u00edficas de su proyecto.<\/p>\n<p>Puede efectuar cambios para adaptarlas a la marca de su proyecto, mejorar la experiencia del usuario o a\u00f1adir funcionalidades personalizadas exclusivas de su aplicaci\u00f3n.<\/p>\n<p>Hay varias formas de hacerlo:<\/p>\n<ul>\n<li><strong>Ignorar plantillas<\/strong>: puede ignorar las plantillas de administraci\u00f3n predeterminadas creando plantillas con la misma estructura de archivos y convenci\u00f3n de nomenclatura en el directorio de plantillas de su proyecto. Django utilizar\u00e1 as\u00ed de forma autom\u00e1tica sus plantillas personalizadas en lugar de las integradas.<\/li>\n<li><strong>Extender plantillas base<\/strong>: muchas de las plantillas de administraci\u00f3n de Django se crean utilizando la herencia de plantillas. Puede crear plantillas que ampl\u00eden las plantillas de administraci\u00f3n base y anulen bloques o secciones espec\u00edficos.<\/li>\n<li><strong>Opciones de plantilla<\/strong>: Django dispone de varias opciones de plantilla que le permiten personalizar el comportamiento de la interfaz de administraci\u00f3n. Esto incluye mostrar determinados campos, especificar cu\u00e1les deben ser editables y definir plantillas personalizadas para campos de modelo espec\u00edficos.<\/li>\n<li><strong>Personalizaci\u00f3n del sitio de administraci\u00f3n<\/strong>: puede personalizar la apariencia y el comportamiento del sitio de administraci\u00f3n subclasificando la clase <code>AdminSite<\/code> y registrando su sitio de administraci\u00f3n personalizado con Django.<\/li>\n<\/ul>\n<h2 class=\"wp-block-heading\">Plantillas URL en Django<\/h2>\n<p>Las plantillas URL en Django ofrecen una forma flexible de definir y generar URL para aplicaciones web.<\/p>\n<h3 class=\"wp-block-heading\">Comprender las plantillas de URL<\/h3>\n<p>En Django, los patrones de URL se definen en el archivo urls.py del proyecto utilizando la funci\u00f3n \u00abpath\u00bb del m\u00f3dulo django.urls.<\/p>\n<p>Estos patrones de URL asignan determinados patrones de URL a funciones Python (vistas) que gestionan las solicitudes HTTP correspondientes.<\/p>\n<p>Este es un ejemplo de un patr\u00f3n de URL b\u00e1sico en Django:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># urls.py\nfrom django.urls import path\nfrom . import views\n\nurlpatterns = [\n    path('', views.home, name='home'),\n    path('about\/', views.about, name='about'),\n]<\/pre>\n<p>En este ejemplo, el patr\u00f3n de URL <code>\u2018 \u2018<\/code> se asigna a la funci\u00f3n de vista <code>views.home<\/code>, y el patr\u00f3n de URL <code>'about\/'<\/code> se asigna a la funci\u00f3n de vista <code>views.about<\/code>.<\/p>\n<h3 class=\"wp-block-heading\">Generaci\u00f3n din\u00e1mica de URL con plantillas de URL<\/h3>\n<p>Las plantillas URL en Django le permiten incluir variables o par\u00e1metros en sus patrones URL. Esto significa que puede crear URL din\u00e1micas que representen diferentes instancias del mismo recurso o incluyan m\u00e1s datos.<\/p>\n<p>Si su archivo urls.py incluye otros archivos URL utilizando <code>include()<\/code>, PyCharm recoge y reconoce autom\u00e1ticamente todas las rutas anidadas, lo que garantiza que las sugerencias de nombres de URL sigan siendo precisas. Tambi\u00e9n puede navegar hasta las definiciones de URL pulsando <em>Ctrl<\/em> y haciendo clic al mismo tiempo en el nombre de una URL para saltar directamente a su fuente, incluso si la URL est\u00e1 definida en un archivo secundario.<\/p>\n<p>Veamos un ejemplo de plantilla de URL con una variable:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># urls.py\nurlpatterns = [\n    path('blog\/\/', views.year_archive, name='blog_year_archive'),\n]<\/pre>\n<p>En este caso, la URL <code>'blog\/\/'<\/code> incluye una variable \u00abyear\u00bb de tipo <code>int<\/code>. Cuando una solicitud coincida con este patr\u00f3n, Django pasar\u00e1 el valor de \u00abyear\u00bb como argumento a la funci\u00f3n de la vista <code>views.year_archive<\/code>.<\/p>\n<h3 class=\"wp-block-heading\">Uso de las URL de Django<\/h3>\n<p>Las URL de Django son la base de cualquier aplicaci\u00f3n y funcionan vinculando las solicitudes de los usuarios a las vistas apropiadas. Al definir patrones de URL adaptados a vistas espec\u00edficas, Django garantiza que su sitio permanezca organizado y escalable.<\/p>\n<h4 class=\"wp-block-heading\">Uso de plantillas de URL con la funci\u00f3n <code>reverse<\/code> de Django<\/h4>\n<p>La funci\u00f3n <code>reverse<\/code> de Django le permite generar URL basadas en sus patrones de URL con nombre. Toma como primer argumento el nombre del patr\u00f3n de URL antes de cualquier otro argumento necesario, y devuelve la URL correspondiente.<\/p>\n<p>Veamos un ejemplo concreto:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># views.py\nfrom django.shortcuts import render\nfrom django.urls import reverse\n\ndef blog_post_detail(request, year, month, slug):\n    # ...\n    url = reverse('blog_post_detail', args=[year, month, slug])\n    return render(request, 'blog\/post_detail.html', {'url': url})<\/pre>\n<p>La funci\u00f3n inversa se utiliza para generar la URL del patr\u00f3n de URL <code>'blog_post_detail'<\/code>, pasando los valores de a\u00f1o, mes y <a href=\"https:\/\/docs.djangoproject.com\/en\/dev\/glossary\/#term-slug\" target=\"_blank\" rel=\"noopener\">slug<\/a> como argumentos.<\/p>\n<p>A continuaci\u00f3n, puede utilizar la URL devuelta en plantillas u otras partes de la aplicaci\u00f3n.<\/p>\n<h4 class=\"wp-block-heading\">Uso de etiquetas URL en plantillas de Django<\/h4>\n<p>La etiqueta de plantilla <code>{% url %}<\/code> de Django es una forma elegante de generar URL directamente dentro de su plantilla. En lugar de codificar las URL, puede hacer referencia a patrones de URL con nombre, para que sus plantillas sean m\u00e1s flexibles y f\u00e1ciles de gestionar.<\/p>\n<p>Aqu\u00ed vemos un ejemplo:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"html\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"><a href=\"{% url 'blog_post_detail' year=2024 month=10 slug=post.slug %}\"> \nLeer m\u00e1s \n<\/a><\/pre>\n<p>En este caso, la etiqueta <code>{% url %}<\/code> crea una URL para la vista <code>blog_post_detail<\/code> pasando los par\u00e1metros <code>year<\/code>, <code>month<\/code> y <code>slug<\/code> . Es importante asegurarse de que estos argumentos coinciden con el patr\u00f3n de URL definido en su archivo urls.py, que deber\u00eda tener este aspecto:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">path('blog\/\/\/\/', views.blog_post_detail, name='blog_post_detail'),<\/pre>\n<p>Este enfoque ayuda a mantener sus plantillas limpias y adaptables, sobre todo a medida que evoluciona su proyecto.<\/p>\n<h2 class=\"wp-block-heading\">Plantillas de Jinja vs. Django<\/h2>\n<p>Aunque Django incluye un motor de plantillas integrado (DTL), los desarrolladores tambi\u00e9n tienen la opci\u00f3n de utilizar alternativas como Jinja.<\/p>\n<p><a href=\"https:\/\/jinja.palletsprojects.com\/en\/stable\/\" target=\"_blank\" rel=\"noopener\">Jinja<\/a> es un motor de plantillas para Python popular, moderno y cargado de funciones. Desarrollado inicialmente para el marco de trabajo web <a href=\"https:\/\/blog.jetbrains.com\/pycharm\/2023\/11\/django-vs-flask-which-is-the-best-python-web-framework\/\">Flask<\/a>, tambi\u00e9n es compatible con Django.<\/p>\n<p>El motor se dise\u00f1\u00f3 para ser r\u00e1pido, seguro y muy extensible. Su amplio conjunto de funcionalidades y capacidades lo hacen vers\u00e1til para la renderizaci\u00f3n de contenidos din\u00e1micos.<\/p>\n<p>Estas son algunas de las principales funcionalidades y ventajas de Jinja sobre el DTL de Django:<\/p>\n<ul>\n<li>Una sintaxis m\u00e1s concisa e intuitiva.<\/li>\n<li>Ejecuci\u00f3n en entornos de pruebas para una mayor seguridad contra los ataques de inyecci\u00f3n de c\u00f3digo.<\/li>\n<li>Un sistema de herencia m\u00e1s flexible y potente.<\/li>\n<li>Mejores herramientas de depuraci\u00f3n y mecanismos de generaci\u00f3n de informes.<\/li>\n<li>Mayor rendimiento al trabajar con plantillas complejas o grandes conjuntos de datos.<\/li>\n<li>Funcionalidad mejorada con filtros y macros integrados, que permiten una l\u00f3gica de renderizado m\u00e1s compleja sin saturar la plantilla.<\/li>\n<\/ul>\n<p>PyCharm puede detectar de forma autom\u00e1tica el tipo de archivo *.jinja y ofrece resaltado de sintaxis, finalizaci\u00f3n de c\u00f3digo y detecci\u00f3n de errores junto con compatibilidad con filtros personalizados y extensiones, lo que asegura una experiencia de desarrollo sin problemas.<\/p>\n<p>A pesar de estas ventajas, tambi\u00e9n es importante recordar que la integraci\u00f3n de Jinja en un proyecto Django requiere unos ajustes m\u00e1s complejos y una mayor configuraci\u00f3n.<\/p>\n<p>Algunos desarrolladores tambi\u00e9n pueden preferir quedarse con el motor de plantillas integrado de Django para mantenerlo todo dentro del ecosistema Django.<\/p>\n<h3 class=\"wp-block-heading\">Codifique m\u00e1s r\u00e1pido con las plantillas activas de Django<\/h3>\n<p>Con la funci\u00f3n de plantillas activas de PyCharm, puede insertar r\u00e1pidamente fragmentos de c\u00f3digo de uso com\u00fan con un simple acceso directo de teclado.<\/p>\n<p>Solo tiene que invocar las plantillas activas pulsando <em>\u2318J<\/em>, escribiendo <code>ListView<\/code> y pulsando la tecla Tab.<\/p>\n<figure class=\"wp-block-video\"><video src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/02\/2-1.mov\" controls=\"controls\" width=\"300\" height=\"150\"><\/video><\/figure>\n<p>Esto reduce la codificaci\u00f3n repetitiva, acelera el desarrollo y garantiza una sintaxis coherente. Incluso puede <strong>personalizar o crear sus propias plantillas<\/strong> para adaptarlas a las necesidades espec\u00edficas de cada proyecto. Esta funcionalidad resulta especialmente \u00fatil para la sintaxis del DTL, en la que los bucles, los condicionales y las estructuras de bloque se repiten con frecuencia.<\/p>\n<h2 class=\"wp-block-heading\">Uso de plantillas de Django: mejores pr\u00e1cticas y consejos<\/h2>\n<p>Trabajar con plantillas de Django es una forma estupenda de gestionar la capa de presentaci\u00f3n de sus aplicaciones web.<\/p>\n<p>Sin embargo, seguir las directrices y llevar a cabo optimizaciones de rendimiento es esencial para garantizar que sus plantillas est\u00e9n bien mantenidas y sean seguras y sistem\u00e1ticas.<\/p>\n<p>Estas son algunas de las mejores pr\u00e1cticas y consejos que debe recordar cuando utilice plantillas de Django:<\/p>\n<ul>\n<li><strong>Separe la presentaci\u00f3n y la l\u00f3gica empresarial<\/strong>. Mantenga las plantillas centradas en la representaci\u00f3n de datos y gestione el procesamiento complejo en vistas o modelos.<\/li>\n<li><strong>Organice sus plantillas de forma l\u00f3gica.<\/strong> Siga la estructura de archivos de Django separando las plantillas por aplicaci\u00f3n y funcionalidad, utilizando subdirectorios seg\u00fan sea necesario.<\/li>\n<li><strong>Utilice las convenciones de nomenclatura de Django<\/strong>. Django sigue un principio de \u00abconvenci\u00f3n sobre configuraci\u00f3n\u00bb, que le permite nombrar sus plantillas de una manera espec\u00edfica para que no necesite indicar el nombre de su plantilla expl\u00edcitamente. Por ejemplo, al utilizar vistas basadas en clases como <code>ListView<\/code>, Django busca autom\u00e1ticamente una plantilla llamada <strong>\/_list.html<\/strong>, simplificando as\u00ed su c\u00f3digo.<\/li>\n<li><strong>Divida las tareas elaboradas en componentes reutilizables.<\/strong> Promueva la reutilizaci\u00f3n del c\u00f3digo y mejore la capacidad de mantenimiento utilizando etiquetas de plantilla, filtros e inclusiones.<\/li>\n<li><strong>Siga unas convenciones de nomenclatura coherentes.<\/strong> Utilice nombres claros y descriptivos para sus plantillas, etiquetas y filtros. Esto facilita a otros desarrolladores la lectura de su c\u00f3digo.<\/li>\n<li><strong>Utilice los filtros de renderizado seguro de Django.<\/strong> Escape siempre los datos proporcionados por el usuario antes de renderizarlos para evitar vulnerabilidades XSS.<\/li>\n<li><strong>Documente la l\u00f3gica compleja de las plantillas.<\/strong> Utilice comentarios claros para explicar las partes complejas de sus plantillas. Esto ayudar\u00e1 a los dem\u00e1s (y a usted mismo m\u00e1s adelante) a entender su c\u00f3digo.<\/li>\n<li><strong>Perfile sus plantillas<\/strong>. Utilice las herramientas de perfilado de Django para encontrar y optimizar cuellos de botella en el rendimiento como bucles ineficientes y l\u00f3gica enrevesada.<\/li>\n<\/ul>\n<p><a href=\"https:\/\/www.jetbrains.com\/guide\/django\/links\/django-in-pycharm-tips-reloaded\/\" target=\"_blank\" rel=\"noopener\">Vea este v\u00eddeo<\/a> donde encontrar\u00e1 consejos sobre Django y funcionalidades de PyCharm con m\u00e1s detalle.<\/p>\n<h2 class=\"wp-block-heading\">Conclusi\u00f3n<\/h2>\n<p>Tanto si est\u00e1 creado un sitio web simple como si se trata de una aplicaci\u00f3n m\u00e1s complicada, ahora ya sabe c\u00f3mo crear plantillas de Django que mejoren la experiencia del usuario y agilicen su proceso de desarrollo.<\/p>\n<p>Pero las plantillas son solo un componente del marco de trabajo de Django. Explore nuestros otros <a href=\"https:\/\/blog.jetbrains.com\/pycharm\/tag\/django\/\">art\u00edculos del blog sobre Django<\/a> y recursos que pueden ayudarle a <a href=\"https:\/\/blog.jetbrains.com\/pycharm\/2024\/01\/how-to-learn-django\/\">aprender Django<\/a>, descubrir las <a href=\"https:\/\/blog.jetbrains.com\/pycharm\/2023\/12\/django-5-0-delight-unraveling-the-newest-features\/\">nuevas funcionalidades de Django<\/a> y mucho m\u00e1s. Tambi\u00e9n puede familiarizarse con <a href=\"https:\/\/docs.djangoproject.com\/en\/5.0\/\" target=\"_blank\" rel=\"noopener\">la documentaci\u00f3n oficial de Django<\/a>.<\/p>\n<h2 class=\"wp-block-heading\">Compatibilidad fiable con Django en PyCharm<\/h2>\n<p>Desde principiantes hasta desarrolladores experimentados, <a href=\"https:\/\/www.jetbrains.com\/pycharm\/web-development\/django\/\" target=\"_blank\" rel=\"noopener\" data-type=\"link\" data-id=\"https:\/\/www.jetbrains.com\/pycharm\/web-development\/django\/\">PyCharm Professional<\/a> est\u00e1 a su disposici\u00f3n para ayudarle a agilizar su flujo de trabajo de desarrollo de Django.<\/p>\n<p>El IDE de Django proporciona asistencia para c\u00f3digo espec\u00edfico de Django, depuraci\u00f3n, previsualizaciones din\u00e1micas, navegaci\u00f3n por todo el proyecto y capacidades de refactorizaci\u00f3n. PyCharm incluye compatibilidad completa con plantillas de Django, lo que le permite gestionarlas y editarlas con facilidad. Tambi\u00e9n puede conectarse a su base de datos con un solo clic y trabajar sin problemas con TypeScript, JavaScript y otros marcos de trabajo de frontend.<\/p>\n<p>Para conocer todos los detalles sobre c\u00f3mo trabajar con plantillas Django en PyCharm, consulte nuestra <a href=\"https:\/\/www.jetbrains.com\/help\/pycharm\/templates.html\" target=\"_blank\" rel=\"noopener\">documentaci\u00f3n<\/a>. A aquellos que son relativamente nuevos en el marco de trabajo de Django podr\u00eda irles bien leer primero nuestro tutorial completo, que cubre todos los pasos del proceso para <a href=\"https:\/\/www.jetbrains.com\/guide\/django\/tutorials\/django-aws\/setup-django\/\" target=\"_blank\" rel=\"noopener\">crear una nueva aplicaci\u00f3n Django en PyCharm<\/a>.<\/p>\n<p>\u00bfListo para empezar? Descargue PyCharm ahora y disfrute de un proceso de desarrollo m\u00e1s productivo.<\/p>\n<div class=\"buttons\">\n<div class=\"buttons__row\"><a class=\"btn\" href=\"https:\/\/www.jetbrains.com\/pycharm\/web-development\/django\/\" target=\"\" rel=\"noopener\">Comience con PyCharm Pro gratis<\/a><\/div>\n<\/div>\n\n\n<p>A<em>rt\u00edculo original en ingl\u00e9s de:<\/em><\/p>\n\n\n    <div class=\"about-author \">\n        <div class=\"about-author__box\">\n            <div class=\"row\">\n                <div class=\"about-author__box-img\">\n                    <img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2021\/03\/evgenia-200x200.jpg\" width=\"200\" height=\"200\" alt=\"Evgenia Verbina\" loading=\"lazy\"  class=\"avatar avatar-200 wp-user-avatar wp-user-avatar-200 photo avatar-default\">\n                <\/div>\n                <div class=\"about-author__box-text\">\n                                            <h4>Evgenia Verbina<\/h4>\n                                                        <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n","protected":false},"author":1086,"featured_media":573312,"comment_status":"closed","ping_status":"closed","template":"","categories":[1401,8377],"tags":[963],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/pycharm\/573269"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/pycharm"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/types\/pycharm"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/users\/1086"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/comments?post=573269"}],"version-history":[{"count":5,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/pycharm\/573269\/revisions"}],"predecessor-version":[{"id":573325,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/pycharm\/573269\/revisions\/573325"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/media\/573312"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/media?parent=573269"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/categories?post=573269"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/tags?post=573269"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/cross-post-tag?post=573269"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}