{"title":"Escribiendo su primera aplicación en Django, parte 1","version":"1.10","locale":"es","docname":"intro/tutorial01","url":"/es/1.10/intro/tutorial01/","canonical":"https://djangodocs.dev/es/1.10/intro/tutorial01/","summary":"Aprendamos mediante el ejemplo. A través de este tutorial le mostraremos cómo crear una aplicación de encuestas básica. Consistirá de dos partes: Un sitio público…","html":"<h1>Escribiendo su primera aplicación en Django, parte 1<a class=\"heading-anchor\" href=\"#writing-your-first-django-app-part-1\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Aprendamos mediante el ejemplo.</p>\n<p>A través de este tutorial le mostraremos cómo crear una aplicación de encuestas básica.</p>\n<p>Consistirá de dos partes:</p>\n<ul class=\"simple\">\n<li><p>Un sitio público que le permite a las personas ver sondeos y votar en ellos.</p></li>\n<li><p>Un sitio admin que le permite añadir, modificar y borrar sondeos.</p></li>\n</ul>\n<p>Asumiremos que ya ha :doc:`  instalado Django &lt;/intro/install&gt;`.Puede ver cuál Django está instalado, así como su versión ejecutando el siguiente comando:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>python<span class=\"w\"> </span>-m<span class=\"w\"> </span>django<span class=\"w\"> </span>--version\n</code></pre></div>\n<p>Si Django está instalado, debería ver la versión de su instalación. Si no es así, obtendrá un error indicando que «No existe el módulo llamado Django».</p>\n<p>Este tutorial está escrito para Django 1.10  y Python 3.4 o versiones posteriores. Si la versión de Django no coincide, puede consultar el tutorial para su versión de Django usando el conmutador de versión que se encuentra en la esquina inferior derecha de esta página, o actualizar Django a la versión más reciente. Si todavía está utilizando Python 2.7,  tendrá que ajustar las muestras de código un poco, como se describe en los comentarios.</p>\n<p>Consulte :doc: Cómo instalar Django &lt;/topics/install&gt; para obtener información sobre cómo desinstalar versiones anteriores de Django e instalar una versión más reciente.</p>\n<aside class=\"admonition-where-to-get-help admonition\">\n<p class=\"admonition-title\">Dónde obtener ayuda:</p>\n<p>Si tiene problemas leyendo este tutorial, por favor envíe un mensaje a django-users| o visite <a class=\"reference external\" href=\"irc://irc.freenode.net/django\">#django on irc.freenode.net</a> para chatear con otros usuarios de Django que puedan ayudar.</p>\n</aside>\n<section id=\"creating-a-project\">\n<h2>Creando un proyecto<a class=\"heading-anchor\" href=\"#creating-a-project\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Si esta es la primera vez que utiliza Django, tendrá que hacerse cargo de ciertas configuraciones iniciales. Concretamente, tendrá que autogenerar un código que establezca un :term: proyecto Django; un conjunto de ajustes para una instancia de Django, incluida la configuración de la base de datos, opciones específicas de Django y configuraciones específicas de la aplicación.</p>\n<p>Desde la línea de comandos, cambie a un directorio donde le gustaría almacenar su código, luego, ejecute el siguiente comando:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>django-admin<span class=\"w\"> </span>startproject<span class=\"w\"> </span>mysite\n</code></pre></div>\n<p>Esto creará un directorio <code class=\"docutils literal notranslate\"><span class=\"pre\">mysite</span></code> en su directorio actual. Si no funcionó, consulte :ref: resolución de problemas del sitio administrativo Django.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Nota</p>\n<p>Tendrá que evitar darle nombres a sus proyectos que sean iguales a los de otros componentes integrados de Python o Django. En particular, esto quiere decir que debe evitar usar nombres como <code class=\"docutils literal notranslate\"><span class=\"pre\">django</span></code> (que entrará en conflicto con Django mismo) o “prueba” (que entrará en conflicto con un paquete interno de Python).</p>\n</aside>\n<aside class=\"admonition-where-should-this-code-live admonition\">\n<p class=\"admonition-title\">¿Dónde debería estar este código?</p>\n<p>Si su experiencia previa es con el PHP de siempre (sin haber usado frameworks modernos) probablemente esté acostumbrado a ubicar el código en la raíz del documento del servidor Web (en un lugar como <code class=\"docutils literal notranslate\"><span class=\"pre\">/var/www</span></code>). Con Django esto no es así. No es buena idea poner ningún código Python en la raíz del documento del servidor Web porque existe la posibilidad de que otras personas puedan ver su código en la Web. Eso no es bueno en términos de seguridad.</p>\n<p>Introduzca su código en algún directorio <strong>fuera</strong> del elemento raíz del documento, como por ejemplo: archivo: /home/mycode.</p>\n</aside>\n<p>Veamos lo que creó: djadmin:` startproject <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">mysite</span><span class=\"o\">/</span>\n    <span class=\"n\">manage</span><span class=\"o\">.</span><span class=\"n\">py</span>\n    <span class=\"n\">mysite</span><span class=\"o\">/</span>\n        <span class=\"fm\">__init__</span><span class=\"o\">.</span><span class=\"n\">py</span>\n        <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">py</span>\n        <span class=\"n\">urls</span><span class=\"o\">.</span><span class=\"n\">py</span>\n        <span class=\"n\">wsgi</span><span class=\"o\">.</span><span class=\"n\">py</span>\n</code></pre></div>\n<p>Estos archivos son:</p>\n<ul class=\"simple\">\n<li><p>: file: El directorio raíz externo <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>mysite/<a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>solo es un contenedor de su proyecto. Su nombre no es relevante para Django; usted puede cambiarle el nombre a lo que quiera.</p></li>\n<li><p><code class=\"file docutils literal notranslate\"><span class=\"pre\">manage.py</span></code>: A command-line utility that lets you interact with this\nDjango project in various ways. You can read all the details about\n<code class=\"file docutils literal notranslate\"><span class=\"pre\">manage.py</span></code> in <a class=\"reference internal\" href=\"/es/1.10/ref/django-admin/\"><span class=\"doc\">django-admin and manage.py</span></a>.</p></li>\n<li><p>The inner <code class=\"file docutils literal notranslate\"><span class=\"pre\">mysite/</span></code> directory is the actual Python package for your\nproject. Its name is the Python package name you’ll need to use to import\nanything inside it (e.g. <code class=\"docutils literal notranslate\"><span class=\"pre\">mysite.urls</span></code>).</p></li>\n<li><p><code class=\"file docutils literal notranslate\"><span class=\"pre\">mysite/__init__.py</span></code>: An empty file that tells Python that this\ndirectory should be considered a Python package. If you’re a Python beginner,\nread <a class=\"reference external\" href=\"https://docs.python.org/3/tutorial/modules.html#tut-packages\" title=\"(en Python versión 3.14)\"><span class=\"xref std std-ref\">more about packages</span></a> in the official Python docs.</p></li>\n<li><p><code class=\"file docutils literal notranslate\"><span class=\"pre\">mysite/settings.py</span></code>: Settings/configuration for this Django\nproject.  <a class=\"reference internal\" href=\"/es/1.10/topics/settings/\"><span class=\"doc\">Django settings</span></a> will tell you all about how settings\nwork.</p></li>\n<li><p>: file: mysite / urls.py: Las declaraciones URL para este proyecto Django; una «tabla de contenidos» de su sitio basado en Django. Puede leer más sobre las URLs en: doc: /topics/http/urls.</p></li>\n<li><p>: file: mysite / wsgi.py: Un punto de entrada para que los servidores web compatibles con WSGI puedan servir su proyecto. Consulte :doc:<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>/howto/deployment/wsgi/index`para más detalles.</p></li>\n</ul>\n</section>\n<section id=\"the-development-server\">\n<h2>El servidor de desarrollo<a class=\"heading-anchor\" href=\"#the-development-server\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Comprobemos que su proyecto Django funciona. Cambie al directorio externo  : file: mysite, si todavía no lo ha hecho, y ejecute los siguientes comandos:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>python<span class=\"w\"> </span>manage.py<span class=\"w\"> </span>runserver\n</code></pre></div>\n<p>Verá la siguiente salida en la línea de comandos:</p>\n<pre class=\"literal-block\">Performing system checks...\n\nSystem check identified no issues (0 silenced).\n\nYou have unapplied migrations; your app may not work properly until they are applied.\nRun 'python manage.py migrate' to apply them.\n\n09 de agosto de 2026 - 15:50:53\nDjango version 1.10, using settings 'mysite.settings'\nStarting development server at <a class=\"reference external\" href=\"http://127.0.0.1:8000/\">http://127.0.0.1:8000/</a>\nQuit the server with CONTROL-C.</pre>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Nota</p>\n<p>Ignore por ahora la advertencia sobre las migraciones de bases de datos sin aplicar, nos ocuparemos de la base de datos dentro de poco.</p>\n</aside>\n<p>Usted ha iniciado el servidor en desarrollo de Django, un servidor web ligero escrito puramente en Python. Lo hemos incluido con Django para que pueda desarrollar cosas rápidamente sin tener que lidiar con la configuración de un servidor en producción, como Apache, hasta que esté listo para la producción.</p>\n<p>Ahora es un buen momento para tener en cuenta que: ** no ** debe utilizar este servidor en algo parecido a un entorno de producción. Está pensado sólo para usarse durante el desarrollo (nuestro trabajo es crear  frameworks Web , no servidores web.)</p>\n<p>Ahora que el servidor está funcionando, visite <a class=\"reference external\" href=\"http://127.0.0.1:8000/\">http://127.0.0.1:8000/</a> con su navegador Web. Verá la página «Bienvenido a Django», en un agradable color azul pastel, ¡Funcionó!</p>\n<aside class=\"admonition-changing-the-port admonition\">\n<p class=\"admonition-title\">Cambiando el puerto</p>\n<p>De forma predeterminada, el: djadmin: comando ` runserver` inicia el servidor de desarrollo en  la IP interna en el puerto 8000.</p>\n<p>Si desea cambiar el puerto del servidor, pásalo como un argumento  de la línea de comandos. Por ejemplo, este comando inicia el servidor en el puerto 8080:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>python<span class=\"w\"> </span>manage.py<span class=\"w\"> </span>runserver<span class=\"w\"> </span><span class=\"m\">8080</span>\n</code></pre></div>\n<p>Si desea cambiar la IP del servidor, pasala junto con el puerto. Así que para escuchar en todas las IPs públicas (útil si quiere mostrar su trabajo en otros equipos de la red), utilice:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>python<span class=\"w\"> </span>manage.py<span class=\"w\"> </span>runserver<span class=\"w\"> </span><span class=\"m\">0</span>.0.0.0:8000\n</code></pre></div>\n<p>Se pueden encontrar documentos completos para el servidor de desarrollo en la referencia del : djadmin:  ` runserver`.</p>\n</aside>\n<aside class=\"admonition-automatic-reloading-of-djadmin-runserver admonition\">\n<p class=\"admonition-title\">Recarga automática del: djadmin: runserver</p>\n<p>El servidor de desarrollo recarga de forma automática el código Python para cada petición cuando sea necesario. No es necesario reiniciar el servidor para que los cambios de código surtan efecto. Sin embargo, algunas acciones como la adición de archivos no provoca un reinicio, por lo que tendrá que reiniciar el servidor en estos casos.</p>\n</aside>\n</section>\n<section id=\"creating-the-polls-app\">\n<h2>Creando la aplicación encuestas<a class=\"heading-anchor\" href=\"#creating-the-polls-app\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Ahora que su entorno, un «proyecto», se ha configurado, ya está listo para empezar a trabajar.</p>\n<p>Cada aplicación que usted escribe en Django consiste en un paquete de Python que sigue una determinada convención. Django tiene una utilidad que genera automáticamente la estructura básica de directorios de una aplicación, por lo que usted puede centrarse en la escritura de código en lugar de crear directorios.</p>\n<aside class=\"admonition-projects-vs-apps admonition\">\n<p class=\"admonition-title\">Proyectos vs. aplicaciones</p>\n<p>¿Cuál es la diferencia entre un proyecto y una aplicación? Una app es una aplicación web que hace algo, por ejemplo, un sistema de blog, una base de datos de registros públicos o una aplicación de encuesta simple. Un proyecto es un conjunto de configuraciones y aplicaciones para un sitio web determinado. Un proyecto puede contener  aplicaciones múltiples. Una aplicación  puede estar en varios proyectos.</p>\n</aside>\n<p>Your apps can live anywhere on your <a class=\"reference external\" href=\"https://docs.python.org/3/tutorial/modules.html#tut-searchpath\" title=\"(en Python versión 3.14)\"><span class=\"xref std std-ref\">Python path</span></a>. In\nthis tutorial, we’ll create our poll app right next to your <code class=\"file docutils literal notranslate\"><span class=\"pre\">manage.py</span></code>\nfile so that it can be imported as its own top-level module, rather than a\nsubmodule of <code class=\"docutils literal notranslate\"><span class=\"pre\">mysite</span></code>.</p>\n<p>Para crear su aplicación, asegúrese de que está en el mismo directorio que :file: manage.py y escriba este comando:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>python<span class=\"w\"> </span>manage.py<span class=\"w\"> </span>startapp<span class=\"w\"> </span>polls\n</code></pre></div>\n<p>Eso va a crear un directorio: file: polls que se presenta de la siguiente forma</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">polls</span><span class=\"o\">/</span>\n    <span class=\"fm\">__init__</span><span class=\"o\">.</span><span class=\"n\">py</span>\n    <span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">py</span>\n    <span class=\"n\">apps</span><span class=\"o\">.</span><span class=\"n\">py</span>\n    <span class=\"n\">migrations</span><span class=\"o\">/</span>\n        <span class=\"fm\">__init__</span><span class=\"o\">.</span><span class=\"n\">py</span>\n    <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">py</span>\n    <span class=\"n\">tests</span><span class=\"o\">.</span><span class=\"n\">py</span>\n    <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">py</span>\n</code></pre></div>\n<p>Esta estructura de directorios almacenará la aplicación encuesta.</p>\n</section>\n<section id=\"write-your-first-view\">\n<h2>Escriba su primera vista<a class=\"heading-anchor\" href=\"#write-your-first-view\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Vamos a escribir la primera vista. Abra el archivo <code class=\"docutils literal notranslate\"><span class=\"pre\">polls/views.py</span></code> y ponga el siguiente código Python en ella:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"default\"><figcaption class=\"code-block-caption\"><code>polls/views.py</code></figcaption><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"polls/views.py\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.http</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">HttpResponse</span>\n\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">index</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"n\">HttpResponse</span><span class=\"p\">(</span><span class=\"s2\">&quot;Hello, world. You&#39;re at the polls index.&quot;</span><span class=\"p\">)</span>\n</code></pre></figure>\n<p>Esta es la vista más simple posible en Django. Para llamar la vista, tenemos que asignarla a una URL y para ello necesitamos una URLconf.</p>\n<p>Para crear una URLconf en el directorio encuestas, cree un archivo llamado `` urls.py``. El  directorio de su aplicación debe verse así</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">polls</span><span class=\"o\">/</span>\n    <span class=\"fm\">__init__</span><span class=\"o\">.</span><span class=\"n\">py</span>\n    <span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">py</span>\n    <span class=\"n\">apps</span><span class=\"o\">.</span><span class=\"n\">py</span>\n    <span class=\"n\">migrations</span><span class=\"o\">/</span>\n        <span class=\"fm\">__init__</span><span class=\"o\">.</span><span class=\"n\">py</span>\n    <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">py</span>\n    <span class=\"n\">tests</span><span class=\"o\">.</span><span class=\"n\">py</span>\n    <span class=\"n\">urls</span><span class=\"o\">.</span><span class=\"n\">py</span>\n    <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">py</span>\n</code></pre></div>\n<p>In the <code class=\"docutils literal notranslate\"><span class=\"pre\">polls/urls.py</span></code> file include the following code:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"default\"><figcaption class=\"code-block-caption\"><code>polls/urls.py</code></figcaption><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"polls/urls.py\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.conf.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">url</span>\n\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">.</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">views</span>\n\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">url</span><span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^$&#39;</span><span class=\"p\">,</span> <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">index</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;index&#39;</span><span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></figure>\n<p>El siguiente paso es señalar la URLconf raíz en el módulo `` polls.urls``. En `` mysite / urls.py``, añada un import para `` django.conf.urls.include`` e inserte una: func: ~ django.conf.urls.include en la lista <code class=\"docutils literal notranslate\"><span class=\"pre\">urlpatterns</span></code> , así que tiene:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"default\"><figcaption class=\"code-block-caption\"><code>mysite/urls.py</code></figcaption><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"mysite/urls.py\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.conf.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">include</span><span class=\"p\">,</span> <span class=\"n\">url</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">admin</span>\n\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">url</span><span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^polls/&#39;</span><span class=\"p\">,</span> <span class=\"n\">include</span><span class=\"p\">(</span><span class=\"s1\">&#39;polls.urls&#39;</span><span class=\"p\">)),</span>\n    <span class=\"n\">url</span><span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^admin/&#39;</span><span class=\"p\">,</span> <span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">site</span><span class=\"o\">.</span><span class=\"n\">urls</span><span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></figure>\n<p>The <a class=\"reference internal\" href=\"/es/1.10/ref/urls/#django.conf.urls.include\" title=\"django.conf.urls.include\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">include()</span></code></a> function allows referencing other\nURLconfs. Note that the regular expressions for the\n<a class=\"reference internal\" href=\"/es/1.10/ref/urls/#django.conf.urls.include\" title=\"django.conf.urls.include\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">include()</span></code></a> function doesn’t have a <code class=\"docutils literal notranslate\"><span class=\"pre\">$</span></code> (end-of-string\nmatch character) but rather a trailing slash. Whenever Django encounters\n<a class=\"reference internal\" href=\"/es/1.10/ref/urls/#django.conf.urls.include\" title=\"django.conf.urls.include\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">include()</span></code></a>, it chops off whatever part of the URL\nmatched up to that point and sends the remaining string to the included URLconf\nfor further processing.</p>\n<p>La idea detrás de <a class=\"reference internal\" href=\"/es/1.10/ref/urls/#django.conf.urls.include\" title=\"django.conf.urls.include\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">include()</span></code></a> es facilitar la conexión y ejecución inmediata de las URLs. Dado que las encuestas están en su propia URLconf  (<code class=\"docutils literal notranslate\"><span class=\"pre\">polls/urls.py</span></code>), se pueden ubicar en»/polls/», en «/ fun_polls /», «/content/polls/» o en cualquier otra ruta raíz , y la aplicación todavía seguirá funcionando.</p>\n<aside class=\"admonition-when-to-use-func-django-conf-urls-include admonition\">\n<p class=\"admonition-title\">Cuándo utilizar: func: ~ django.conf.urls.include ()</p>\n<p>Siempre debe usar <code class=\"docutils literal notranslate\"><span class=\"pre\">include()</span></code> cuando incluye otros patrones de URL. `` admin.site.urls`` es la única excepción a esto.</p>\n</aside>\n<aside class=\"admonition-doesn-t-match-what-you-see admonition\">\n<p class=\"admonition-title\">¿No coincide con lo que ve?</p>\n<p>Si usted ve <code class=\"docutils literal notranslate\"><span class=\"pre\">include(admin.site.urls)</span></code> en lugar de solo <code class=\"docutils literal notranslate\"><span class=\"pre\">admin.site.urls</span></code>, está usando probablemente una versión de Django que no coincide con la versión de este tutorial. Usted querrá ya sea cambiar a la versión anterior o a la versión más reciente de Django.</p>\n</aside>\n<p>Usted ha enviado una vista “índex” al URLconf. Comprobemos si funciona, ejecute el siguiente comando:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>python<span class=\"w\"> </span>manage.py<span class=\"w\"> </span>runserver\n</code></pre></div>\n<p>Vaya a <a class=\"reference external\" href=\"http://localhost:8000/polls/\">http://localhost:8000/polls/</a> en su navegador, y usted debería ver el texto «* Hola, mundo. Usted está en el índice de encuestas*.”  el cual definió en la vista <code class=\"docutils literal notranslate\"><span class=\"pre\">índex</span></code>.</p>\n<p>La <a class=\"reference internal\" href=\"/es/1.10/ref/urls/#django.conf.urls.url\" title=\"django.conf.urls.url\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">url()</span></code></a> pasa cuatro argumentos, dos obligatorios: “regex” y “view”, y dos opcionales: <code class=\"docutils literal notranslate\"><span class=\"pre\">kwargs</span></code> y “name”. En este punto, vale la pena revisar para que sirven estos argumentos.</p>\n<section id=\"url-argument-regex\">\n<h3>Argumento <a class=\"reference internal\" href=\"/es/1.10/ref/urls/#django.conf.urls.url\" title=\"django.conf.urls.url\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">url()</span></code></a>: expresión regular<a class=\"heading-anchor\" href=\"#url-argument-regex\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>El término “regex” es una abreviatura comúnmente usada que significa “expresión regular” y la cual es una sintaxis de búsqueda de patrones en cadenas, o en este caso, patrones de  URL. Django comienza en la primera expresión regular y se abre camino en la lista, comparando la URL solicitada con cada expresión regular hasta que encuentra una que coincida.</p>\n<p>Tenga en cuenta que estas expresiones regulares no buscan parámetros GET y POST o el nombre de dominio. Por ejemplo, en una petición a``https://www.example.com/myapp/<code class=\"docutils literal notranslate\"><span class=\"pre\">,</span> <span class=\"pre\">el</span> <span class=\"pre\">URLconf</span> <span class=\"pre\">buscará</span> <span class=\"pre\">``myapp/</span></code>.  En una petición a  <code class=\"docutils literal notranslate\"><span class=\"pre\">https://www.example.com/myapp/?page=3</span></code>, el URLconf también buscará <code class=\"docutils literal notranslate\"><span class=\"pre\">myapp/</span></code>.</p>\n<p>Si necesita ayuda con las expresiones regulares, consulte la entrada de Wikipedia y la documentación del módulo :mod: re. Además, el libro O’Reilly   «Mastering Regular Expressions» por Jeffrey Friedl es fantástico. Sin embargo, en la práctica,  no necesita ser un experto en expresiones regulares ya que tan solo necesita saber cómo capturar patrones simples. De hecho, las expresiones regulares complejas pueden tener un bajo rendimiento de búsqueda por lo que no debe depender por completo del poder de las expresiones regulares.</p>\n<p>Por último, una nota de rendimiento: estas expresiones regulares se compilan la primera vez que se carga el módulo URLconf. Son súper rápidas (siempre y cuando las búsquedas no sean demasiado complejas como se señaló anteriormente).</p>\n</section>\n<section id=\"url-argument-view\">\n<h3>Argumento <a class=\"reference internal\" href=\"/es/1.10/ref/urls/#django.conf.urls.url\" title=\"django.conf.urls.url\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">url()</span></code></a>: vista<a class=\"heading-anchor\" href=\"#url-argument-view\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Cuando Django encuentra una coincidencia de expresiones regulares, llama a la función de la vista especificada, con un objeto <a class=\"reference internal\" href=\"/es/1.10/ref/request-response/#django.http.HttpRequest\" title=\"django.http.HttpRequest\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">HttpRequest</span></code></a>  como el primer argumento y cualquiera de los valores «capturados» de la expresión regular como otros argumentos. Si la expresión regular utiliza capturas sencillas, los valores se pasan como argumentos posicionales; si utiliza capturas nombradas, los valores se pasan como argumentos de palabra clave. Le daremos un ejemplo de esto en un momento.</p>\n</section>\n<section id=\"url-argument-kwargs\">\n<h3>Argumento <a class=\"reference internal\" href=\"/es/1.10/ref/urls/#django.conf.urls.url\" title=\"django.conf.urls.url\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">url()</span></code></a>: kwargs<a class=\"heading-anchor\" href=\"#url-argument-kwargs\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Los argumentos arbitrarios de palabra clave  se pueden pasar en un diccionario a la vista destino. No vamos a utilizar esta funcionalidad de Django en el tutorial.</p>\n</section>\n<section id=\"url-argument-name\">\n<h3>Argumento <a class=\"reference internal\" href=\"/es/1.10/ref/urls/#django.conf.urls.url\" title=\"django.conf.urls.url\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">url()</span></code></a>: nombre<a class=\"heading-anchor\" href=\"#url-argument-name\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Naming your URL lets you refer to it unambiguously from elsewhere in Django,\nespecially from within templates. This powerful feature allows you to make\nglobal changes to the URL patterns of your project while only touching a single\nfile.</p>\n<p>Cuando se familiarice con el flujo básico de solicitud y respuesta, lea :doc: la parte 2 del presente  tutorial &lt;/intro/tutorial02&gt; para empezar a trabajar con la base de datos.</p>\n</section>\n</section>","rootId":"writing-your-first-django-app-part-1","toc":[{"title":"Creando un proyecto","anchor":"creating-a-project","children":[]},{"title":"El servidor de desarrollo","anchor":"the-development-server","children":[]},{"title":"Creando la aplicación encuestas","anchor":"creating-the-polls-app","children":[]},{"title":"Escriba su primera vista","anchor":"write-your-first-view","children":[{"title":"Argumento url(): expresión regular","anchor":"url-argument-regex","children":[]},{"title":"Argumento url(): vista","anchor":"url-argument-view","children":[]},{"title":"Argumento url(): kwargs","anchor":"url-argument-kwargs","children":[]},{"title":"Argumento url(): nombre","anchor":"url-argument-name","children":[]}]}],"breadcrumbs":[{"docname":"intro/index","title":"Empezando","url":"/es/1.10/intro/"}],"prev":{"docname":"intro/install","title":"Guía de instalación rápida","url":"/es/1.10/intro/install/"},"next":{"docname":"intro/tutorial02","title":"Escribiendo su primera aplicación en Django, parte 2","url":"/es/1.10/intro/tutorial02/"},"formats":{"html":"/es/1.10/intro/tutorial01/","markdown":"/es/1.10/intro/tutorial01.md","json":"/es/1.10/intro/tutorial01.json"},"source":"https://github.com/django/django/blob/stable/1.10.x/docs/intro/tutorial01.txt","official":"https://docs.djangoproject.com/es/1.10/intro/tutorial01/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10","1.9"],"inLocales":["en","fr","ja","id","pt-br","es","el","pl"]}