<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Pablog Planet</title>
	<atom:link href="http://pablogplanet.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://pablogplanet.wordpress.com</link>
	<description>Notas que me valen como recordatorios sobre python, django y lo que se tercie.</description>
	<lastBuildDate>Fri, 30 Jul 2010 11:18:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='pablogplanet.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Pablog Planet</title>
		<link>http://pablogplanet.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://pablogplanet.wordpress.com/osd.xml" title="Pablog Planet" />
	<atom:link rel='hub' href='http://pablogplanet.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Notas. Algunos trucos de django</title>
		<link>http://pablogplanet.wordpress.com/2010/07/28/notas-algunos-trucos-de-django/</link>
		<comments>http://pablogplanet.wordpress.com/2010/07/28/notas-algunos-trucos-de-django/#comments</comments>
		<pubDate>Wed, 28 Jul 2010 16:19:00 +0000</pubDate>
		<dc:creator>pablo</dc:creator>
				<category><![CDATA[django]]></category>
		<category><![CDATA[notas]]></category>
		<category><![CDATA[pablo vieytes]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[tip]]></category>
		<category><![CDATA[trucos]]></category>

		<guid isPermaLink="false">http://pablogplanet.wordpress.com/2010/07/28/notas-algunos-trucos-de-django</guid>
		<description><![CDATA[He encontrado algunos trucos&#160;en Stack Overflow. Pongo dos que me han gustado. El primero ya lo usaba, pero aun así lo pongo porque me parece básico. El segundo, es más bien de relleno. De los que había es el que &#8230; <a href="http://pablogplanet.wordpress.com/2010/07/28/notas-algunos-trucos-de-django/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pablogplanet.wordpress.com&amp;blog=13314445&amp;post=41&amp;subd=pablogplanet&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>He encontrado <a href="http://stackoverflow.com/questions/550632/favorite-django-tips-features">algunos trucos</a>&nbsp;en <a href="http://stackoverflow.com/">Stack Overflow</a>. Pongo dos que me han gustado. El primero ya lo usaba, pero aun así lo pongo porque me parece básico. El segundo, es más bien de relleno. De los que había es el que más me gustaba. El post me vale más que nada de recordatorio. Iré échando un ojo al hilo de para ver si ponen alguno más que esté bien.</p>
<p>Direcciones relativas en el fichero settings.py:</p>
<pre><code>import os.pathPROJECT_DIR = os.path.dirname(__file__)...STATIC_DOC_ROOT = os.path.join(PROJECT_DIR, "static")...TEMPLATE_DIRS = (    os.path.join(PROJECT_DIR, "templates"),)</code></pre>
<p>Un decorador para los templates:</p>
<pre><code>@render_to('template.html')def foo(request):    bar = Bar.object.all()    return {'bar': bar}

# equals todef foo(request):    bar = Bar.object.all()    return render_to_response('template.html', {'bar': bar}, context_instance=RequestContext(request))</code></pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pablogplanet.wordpress.com/41/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pablogplanet.wordpress.com/41/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pablogplanet.wordpress.com/41/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pablogplanet.wordpress.com/41/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/pablogplanet.wordpress.com/41/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/pablogplanet.wordpress.com/41/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/pablogplanet.wordpress.com/41/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/pablogplanet.wordpress.com/41/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pablogplanet.wordpress.com/41/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pablogplanet.wordpress.com/41/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pablogplanet.wordpress.com/41/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pablogplanet.wordpress.com/41/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pablogplanet.wordpress.com/41/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pablogplanet.wordpress.com/41/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pablogplanet.wordpress.com&amp;blog=13314445&amp;post=41&amp;subd=pablogplanet&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pablogplanet.wordpress.com/2010/07/28/notas-algunos-trucos-de-django/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/94d1e2dfb201f5fd4a845c8bbea4a667?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">lacloaca</media:title>
		</media:content>
	</item>
		<item>
		<title>Nota: Añadiendo south a un projecto existente de django</title>
		<link>http://pablogplanet.wordpress.com/2010/07/26/nota-anadiendo-south-a-un-projecto-existente-de-django/</link>
		<comments>http://pablogplanet.wordpress.com/2010/07/26/nota-anadiendo-south-a-un-projecto-existente-de-django/#comments</comments>
		<pubDate>Mon, 26 Jul 2010 13:57:00 +0000</pubDate>
		<dc:creator>pablo</dc:creator>
				<category><![CDATA[django]]></category>
		<category><![CDATA[nota]]></category>
		<category><![CDATA[pablo vieytes]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[south]]></category>

		<guid isPermaLink="false">http://pablogplanet.wordpress.com/2010/07/26/nota-anadiendo-south-a-un-projecto-existente-de-django</guid>
		<description><![CDATA[Hace poco tiempo, miré por encima&#160;como funcionaba south, pero no lo había usado hasta ahora. Simplemente había traducido y resumido el tutorial oficial para hacer un mini tutorial, pero sin incluirlo en ningún proyecto. Ahora se ha añadido al proyecto &#8230; <a href="http://pablogplanet.wordpress.com/2010/07/26/nota-anadiendo-south-a-un-projecto-existente-de-django/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pablogplanet.wordpress.com&amp;blog=13314445&amp;post=40&amp;subd=pablogplanet&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Hace poco tiempo, <a href="http://pablogplanet.blogspot.com/2010/06/notas-mini-tutorial-django-south.html">miré por encima</a>&nbsp;como funcionaba <a href="http://south.aeracode.org/"><i>south</i></a>, pero no lo había usado hasta ahora. Simplemente había traducido y resumido el tutorial oficial para hacer un mini tutorial, pero sin incluirlo en ningún proyecto.</p>
<p>Ahora se ha añadido al proyecto sobre el que estoy trabajando el módulo <a href="http://south.aeracode.org/"><i>south</i></a> y por lo tanto tenía que añadir las migraciones correspondientes a la base de datos de mi ordenador de desarrollo.</p>
<p>No he sido capaz de añadir <i><a href="http://south.aeracode.org/">south</a></i> sin borrar los datos que había previamente en las tablas. Me imagino que se podrá, pero como no me ha salido a la primera y los datos que tenía, eran de prueba, simplemente me he cargado las tablas de la base de datos.</p>
<p>El orden que he seguido es el siguiente:</p>
<p>Borrar las tablas de la base de datos se las aplicaciones que vaya a gestionar South.</p>
<p>Eliminar las aplicaciones de&nbsp;INSTALLED_APPS.</p>
<p>Sincronizar la base de datos.</p>
<p>Añadimos de nuevo las aplicaciones a INSTALLED_APPS.</p>
<p>Creamos la primera migración de las aplicaciones que vaya a gestionar South.</p>
<pre><code>python manage.py schemamigration app_name –-initial</code></pre>
<p>Donde <i>app_name</i> es el nombre de la aplicación que gestiona South. Hay que repetir este proceso para cada aplicación que gestionemos con South.</p>
<p>Ahora aplicamos la migración.<br /><code></code>
<pre><code>python manage.py migrate app_name</code></pre>
<p>A partir de este momento, cada vez que se realice un cambio en los modelos, es necesario crear una nueva migración con:</p>
<pre><code>manage.py schemamigration app_name –-auto</code></pre>
<p><code></code></p>
<p>Para aplicar los cambios realizados hay que volver a usar:</p>
<p><code></code>
<pre><code>python manage.py migrate app_name</code></pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pablogplanet.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pablogplanet.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pablogplanet.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pablogplanet.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/pablogplanet.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/pablogplanet.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/pablogplanet.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/pablogplanet.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pablogplanet.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pablogplanet.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pablogplanet.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pablogplanet.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pablogplanet.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pablogplanet.wordpress.com/40/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pablogplanet.wordpress.com&amp;blog=13314445&amp;post=40&amp;subd=pablogplanet&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pablogplanet.wordpress.com/2010/07/26/nota-anadiendo-south-a-un-projecto-existente-de-django/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/94d1e2dfb201f5fd4a845c8bbea4a667?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">lacloaca</media:title>
		</media:content>
	</item>
		<item>
		<title>Nota: Palabras Clave para los colores en CSS</title>
		<link>http://pablogplanet.wordpress.com/2010/06/27/nota-palabras-clave-para-los-colores-en-css/</link>
		<comments>http://pablogplanet.wordpress.com/2010/06/27/nota-palabras-clave-para-los-colores-en-css/#comments</comments>
		<pubDate>Sun, 27 Jun 2010 22:19:00 +0000</pubDate>
		<dc:creator>pablo</dc:creator>
				<category><![CDATA[css]]></category>
		<category><![CDATA[nota]]></category>

		<guid isPermaLink="false">http://pablogplanet.wordpress.com/2010/06/27/nota-palabras-clave-para-los-colores-en-css</guid>
		<description><![CDATA[Palabras clave para los colores en CSS. X11 color names http://en.wikipedia.org/wiki/Websafe<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pablogplanet.wordpress.com&amp;blog=13314445&amp;post=39&amp;subd=pablogplanet&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h2>Palabras clave para los colores en CSS.</p>
<p>
<div class="separator" style="clear:both;text-align:center;"><a href="http://pablogplanet.files.wordpress.com/2010/06/f0303.gif" style="margin-left:1em;margin-right:1em;"><img border="0" src="http://pablogplanet.files.wordpress.com/2010/06/f0303.gif?w=300" /></a></div>
<p>X11 color names</p>
<p>
<div class="separator" style="clear:both;text-align:center;"><a href="http://pablogplanet.files.wordpress.com/2010/06/colors.png" style="margin-left:1em;margin-right:1em;"><img border="0" height="400" src="http://pablogplanet.files.wordpress.com/2010/06/colors.png?w=380&#038;h=400" width="380" /></a></div>
</h2>
<p><a href="http://en.wikipedia.org/wiki/Websafe">http://en.wikipedia.org/wiki/Websafe</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pablogplanet.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pablogplanet.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pablogplanet.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pablogplanet.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/pablogplanet.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/pablogplanet.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/pablogplanet.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/pablogplanet.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pablogplanet.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pablogplanet.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pablogplanet.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pablogplanet.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pablogplanet.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pablogplanet.wordpress.com/39/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pablogplanet.wordpress.com&amp;blog=13314445&amp;post=39&amp;subd=pablogplanet&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pablogplanet.wordpress.com/2010/06/27/nota-palabras-clave-para-los-colores-en-css/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/94d1e2dfb201f5fd4a845c8bbea4a667?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">lacloaca</media:title>
		</media:content>

		<media:content url="http://pablogplanet.files.wordpress.com/2010/06/f0303.gif?w=300" medium="image" />

		<media:content url="http://pablogplanet.files.wordpress.com/2010/06/colors.png?w=285" medium="image" />
	</item>
		<item>
		<title>Nota: Script en Django</title>
		<link>http://pablogplanet.wordpress.com/2010/06/25/nota-script-en-django/</link>
		<comments>http://pablogplanet.wordpress.com/2010/06/25/nota-script-en-django/#comments</comments>
		<pubDate>Fri, 25 Jun 2010 06:18:00 +0000</pubDate>
		<dc:creator>pablo</dc:creator>
				<category><![CDATA[django]]></category>
		<category><![CDATA[nota]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[script]]></category>

		<guid isPermaLink="false">http://pablogplanet.wordpress.com/2010/06/25/nota-script-en-django</guid>
		<description><![CDATA[Puede ser una buena idea, para un proyecto de django, tener scripts externos que realicen tareas concretas.&#160;Para generar estos scripts, vamos a usar la opción, que tiene django a partir de la versión 1.0, de crear subcomandos para &#8220;manage.py&#8221;. Una &#8230; <a href="http://pablogplanet.wordpress.com/2010/06/25/nota-script-en-django/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pablogplanet.wordpress.com&amp;blog=13314445&amp;post=38&amp;subd=pablogplanet&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Puede ser una buena idea, para un proyecto de django, tener scripts externos que realicen tareas concretas.&nbsp;Para generar estos scripts, vamos a usar la opción, que tiene django a partir de la versión 1.0, de crear subcomandos para <i>&#8220;manage.py&#8221;</i>. Una vez creado el subcomando, para ejecutar el script, simplemente habrá que ejecutar el fichero <i>&#8220;manage.py&#8221;</i>&nbsp;pasándole como parámetro nuestro subcomando.</p>
<p>En la <a href="http://docs.djangoproject.com/en/dev/howto/custom-management-commands/">página</a> de django, nos muestran como se crean los subcomandos.<br /><a href="http://docs.djangoproject.com/en/dev/howto/custom-management-commands/">Writing custom django-admin commands</a>. </p>
<p>La metodología para crear los subcomandos es muy fácil, en el directorio de una app de django, hay que crear unos directorios y unos ficheros. El fichero que contiene el código del subcomando, tendrá el nombre del subcomando con la extensión <i>&#8220;py&#8221;</i>. Veamos como quedaría el directorio de la app si el nombre del subcomando fuese &#8220;my_subcommand&#8221;:</p>
<pre><code>app/    __init__.py    models.py    management/        __init__.py        commands/            __init__.py            my_subcommand.py    tests.py    views.py</code></pre>
<p>Por los tanto los ficheros que hay que crear son:
<ul>
<li>management/__init__.py</li>
<li>management/commands/__init__.py</li>
<li>management/commands/my_subcommand.py</li>
</ul>
<p>Es importante crear los ficheros __init__.py. Estos ficheros están en blanco, pero indican que los directorios son módulos de python. </p>
<p>En el fichero <i>&#8220;management/commands/my_subcommand.py&#8221;</i>, es donde hay que escribir el código del subcomando.</p>
<p>Como ejemplo, voy a poner un subcomando de <i>&#8220;manage.py&#8221;</i> que muestre el texto &#8220;Hello world!&#8221;.</p>
<p>Dentro del directorio de cualquier aplicación del proyecto, tiene que estar añadida la aplicación a INSTALLED_APPS, creamos los siguientes ficheros:</p>
<ul>
<li>management/__init__.py</li>
<li>management/commands/__init__.py</li>
<li>management/commands/hello_world.py</li>
</ul>
<div></div>
<p>Los ficheros __init__.py están vacíos, y en&nbsp;<i>&#8220;management/commands/hello_world.py&#8221;</i>&nbsp;copiamos el siguiente código.</p>
<p>
<pre><code>from django.core.management.base import BaseCommand

class Command(BaseCommand):    help = 'check unchecked votes'

    def handle(self, *args, **options):        print "Hello world!"</code></pre>
<p>Para ejecutar el script, hay que ir al directorio principal del proyecto y ejecutar en el terminal:
<pre><code>python manage.py hello_world</code></pre>
<p><code></code></p>
<p>Este ejemplo es muy simple, y no usa los modelos de django, pero vale para ver como es la estructura de un subcomando. En el fichero que contiene el código del subcomando, se pueden importar los modelos como en cualquier otro fichero del proyecto.</p>
<pre><code>from myproject.myapp.models import Model</code></pre>
<p><code></code></p>
<p>Lo que nos permite generar scripts que interactúen con los modelos creados en nuestro proyecto y usar la metodología de django para trabajar con la base de datos.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pablogplanet.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pablogplanet.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pablogplanet.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pablogplanet.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/pablogplanet.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/pablogplanet.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/pablogplanet.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/pablogplanet.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pablogplanet.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pablogplanet.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pablogplanet.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pablogplanet.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pablogplanet.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pablogplanet.wordpress.com/38/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pablogplanet.wordpress.com&amp;blog=13314445&amp;post=38&amp;subd=pablogplanet&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pablogplanet.wordpress.com/2010/06/25/nota-script-en-django/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/94d1e2dfb201f5fd4a845c8bbea4a667?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">lacloaca</media:title>
		</media:content>
	</item>
		<item>
		<title>Nota: Tutoriales oficiales de django</title>
		<link>http://pablogplanet.wordpress.com/2010/06/25/nota-tutoriales-oficiales-de-django/</link>
		<comments>http://pablogplanet.wordpress.com/2010/06/25/nota-tutoriales-oficiales-de-django/#comments</comments>
		<pubDate>Fri, 25 Jun 2010 05:36:00 +0000</pubDate>
		<dc:creator>pablo</dc:creator>
				<category><![CDATA[django]]></category>
		<category><![CDATA[nota]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://pablogplanet.wordpress.com/2010/06/25/nota-tutoriales-oficiales-de-django</guid>
		<description><![CDATA[En la página web de django hay una gran variedad de tutoriales. http://code.djangoproject.com/wiki/Tutorials<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pablogplanet.wordpress.com&amp;blog=13314445&amp;post=37&amp;subd=pablogplanet&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>En la página web de <a href="http://www.djangoproject.com/">django</a> hay una gran variedad de tutoriales.</p>
<p><a href="http://code.djangoproject.com/wiki/Tutorials">http://code.djangoproject.com/wiki/Tutorials</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pablogplanet.wordpress.com/37/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pablogplanet.wordpress.com/37/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pablogplanet.wordpress.com/37/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pablogplanet.wordpress.com/37/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/pablogplanet.wordpress.com/37/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/pablogplanet.wordpress.com/37/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/pablogplanet.wordpress.com/37/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/pablogplanet.wordpress.com/37/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pablogplanet.wordpress.com/37/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pablogplanet.wordpress.com/37/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pablogplanet.wordpress.com/37/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pablogplanet.wordpress.com/37/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pablogplanet.wordpress.com/37/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pablogplanet.wordpress.com/37/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pablogplanet.wordpress.com&amp;blog=13314445&amp;post=37&amp;subd=pablogplanet&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pablogplanet.wordpress.com/2010/06/25/nota-tutoriales-oficiales-de-django/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/94d1e2dfb201f5fd4a845c8bbea4a667?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">lacloaca</media:title>
		</media:content>
	</item>
		<item>
		<title>nota: lista vacía en python</title>
		<link>http://pablogplanet.wordpress.com/2010/06/23/nota-lista-vacia-en-python/</link>
		<comments>http://pablogplanet.wordpress.com/2010/06/23/nota-lista-vacia-en-python/#comments</comments>
		<pubDate>Wed, 23 Jun 2010 06:08:00 +0000</pubDate>
		<dc:creator>pablo</dc:creator>
				<category><![CDATA[nota]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://pablogplanet.wordpress.com/2010/06/23/nota-lista-vacia-en-python</guid>
		<description><![CDATA[Comprobación de lista vacía: a = []if not a: print "list is empty"<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pablogplanet.wordpress.com&amp;blog=13314445&amp;post=36&amp;subd=pablogplanet&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Comprobación de lista vacía:
<pre><code>a = []if not a:    print "list is empty"</code></pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pablogplanet.wordpress.com/36/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pablogplanet.wordpress.com/36/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pablogplanet.wordpress.com/36/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pablogplanet.wordpress.com/36/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/pablogplanet.wordpress.com/36/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/pablogplanet.wordpress.com/36/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/pablogplanet.wordpress.com/36/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/pablogplanet.wordpress.com/36/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pablogplanet.wordpress.com/36/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pablogplanet.wordpress.com/36/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pablogplanet.wordpress.com/36/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pablogplanet.wordpress.com/36/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pablogplanet.wordpress.com/36/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pablogplanet.wordpress.com/36/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pablogplanet.wordpress.com&amp;blog=13314445&amp;post=36&amp;subd=pablogplanet&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pablogplanet.wordpress.com/2010/06/23/nota-lista-vacia-en-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/94d1e2dfb201f5fd4a845c8bbea4a667?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">lacloaca</media:title>
		</media:content>
	</item>
		<item>
		<title>Usando path relativos para los templates de Django</title>
		<link>http://pablogplanet.wordpress.com/2010/06/09/usando-path-relativos-para-los-templates-de-django/</link>
		<comments>http://pablogplanet.wordpress.com/2010/06/09/usando-path-relativos-para-los-templates-de-django/#comments</comments>
		<pubDate>Wed, 09 Jun 2010 08:17:00 +0000</pubDate>
		<dc:creator>pablo</dc:creator>
				<category><![CDATA[django]]></category>
		<category><![CDATA[nota]]></category>
		<category><![CDATA[pygtk]]></category>

		<guid isPermaLink="false">http://pablogplanet.wordpress.com/2010/06/09/usando-path-relativos-para-los-templates-de-django</guid>
		<description><![CDATA[En el archivo settings.py, es necesario indicar donde se encuentran los templates con su path absoluto: TEMPLATE_DIRS = ( # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates". # Always use forward slashes, even on Windows. # Don't forget to use &#8230; <a href="http://pablogplanet.wordpress.com/2010/06/09/usando-path-relativos-para-los-templates-de-django/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pablogplanet.wordpress.com&amp;blog=13314445&amp;post=35&amp;subd=pablogplanet&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>En el archivo settings.py, es necesario indicar donde se encuentran los templates con su path absoluto:
<pre><code>TEMPLATE_DIRS = (    # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".    # Always use forward slashes, even on Windows.    # Don't forget to use absolute paths, not relative paths.)</code></pre>
<p>Teniendo en cuenta que es código python, podemos hacer que esos paths se calculen a partir de paths relativos. Veamos como.</p>
<p>Es necesario incluir el siguiente código en el fichero settings.py
<pre><code>import osPROJECT_PATH = os.path.abspath(os.path.dirname(__file__))</code></pre>
<p>Una vez añadido este código al fichero, ya podemos indicar el template de forma relativa. </p>
<pre><code>TEMPLATE_DIRS = (os.path.join(PROJECT_PATH, 'templates')

)</code></pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pablogplanet.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pablogplanet.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pablogplanet.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pablogplanet.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/pablogplanet.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/pablogplanet.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/pablogplanet.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/pablogplanet.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pablogplanet.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pablogplanet.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pablogplanet.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pablogplanet.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pablogplanet.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pablogplanet.wordpress.com/35/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pablogplanet.wordpress.com&amp;blog=13314445&amp;post=35&amp;subd=pablogplanet&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pablogplanet.wordpress.com/2010/06/09/usando-path-relativos-para-los-templates-de-django/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/94d1e2dfb201f5fd4a845c8bbea4a667?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">lacloaca</media:title>
		</media:content>
	</item>
		<item>
		<title>Notas: Mini tutorial Django South</title>
		<link>http://pablogplanet.wordpress.com/2010/06/01/notas-mini-tutorial-django-south/</link>
		<comments>http://pablogplanet.wordpress.com/2010/06/01/notas-mini-tutorial-django-south/#comments</comments>
		<pubDate>Tue, 01 Jun 2010 10:28:00 +0000</pubDate>
		<dc:creator>pablo</dc:creator>
				<category><![CDATA[django]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[south]]></category>

		<guid isPermaLink="false">http://pablogplanet.wordpress.com/2010/06/01/notas-mini-tutorial-django-south</guid>
		<description><![CDATA[South permite hacer migraciones de aplicaciones Django. El principal objetivo de este mini tutorial, es mostrar como south nos proporciona una capa que nos permite cambiar los modelos en las aplicaciones django y mantener la informanción introducida anteriormente. Página oficial &#8230; <a href="http://pablogplanet.wordpress.com/2010/06/01/notas-mini-tutorial-django-south/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pablogplanet.wordpress.com&amp;blog=13314445&amp;post=34&amp;subd=pablogplanet&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://south.aeracode.org/">South</a> permite hacer migraciones de aplicaciones Django. El principal objetivo de este mini tutorial, es mostrar como south nos proporciona una capa que nos permite cambiar los modelos en las aplicaciones django y mantener la informanción introducida anteriormente.</p>
<p>Página oficial del módulo:<br /><a href="http://south.aeracode.org/">http://south.aeracode.org/</a></p>
<p>Para instalar el módulo, yo lo he hecho, a través de easy_install.</p>
<p>Si no tienes instalado la herramienta de instalción, se instala con:</p>
<pre><code>sudo apt-get install python-setuptools</code></pre>
<p>y para instalar el módulo de south:</p>
<pre><code>sudo easy_install South</code></pre>
<p>Este mini tutorial, está basado en el <a href="http://south.aeracode.org/docs/tutorial/index.html">tutorial oficial</a> que se puede encontrar en la página de South. Es muy importante seguir el orden en que se sincroniza la base de datos. Si no se hace en el orden correcto, pueden aparecer errores.</p>
<p><a href="http://south.aeracode.org/docs/tutorial/index.html">http://south.aeracode.org/docs/tutorial/index.html</a></p>
<p><a href="http://south.aeracode.org/docs/tutorial/index.html"></a>Creamos un proyecto nuevo:</p>
<pre><code>django-admin startproject demosouth</code></pre>
<p>Ahora, hay que configurar la base de datos que va a usar django. Yo he usado sqlite, ya que para estos ejemplos sencillos, me parece la opción más simple. (Ver como hacerlo <a href="http://pablogplanet.blogspot.com/2010/05/django-es-un-framework-de-desarrollo.html">aquí</a>). También incluimos la applicacion &#8216;south&#8217; en INSTALLED_APPS. He comentado el resto de aplicaciones que vienen por defecto.</p>
<p>A continuación se sincroniza la base de datos.</p>
<pre><code>./manage.py syncdb</code></pre>
<p>Ahorar creamos una aplicación sobre la que trabajar.</p>
<p>
<pre><code>./manage.py startapp southtut</code></pre>
<p>Editamos el fichero southtut/models.py y añadimos la siguiente clase:</p>
<p>
<pre><code>class Knight(models.Model):    name = models.CharField(max_length=100)    of_the_round_table = models.BooleanField()</code></pre>
<p>Añadimos la aplicación southtut a INSTALLES_APPS. Ahora <b>no sincronizamos</b> la base de datos, en vez de eso, creamos una migración,</p>
<pre><code>./manage.py schemamigration southtut –-initial</code></pre>
<p>y la aplicamos.</p>
<pre><code>./manage.py migrate southtut</code></pre>
<p>Al aplicar la migración, se ha generado la tabla correspondiente.</p>
<p>Para ver como no afecta los cambios en modelos de django en la la información introducida con anterioridad, es necesario que las tablas de la base de datos contengan información. Se puede hacer mediante&nbsp;<i>&#8220;./manage.py shell&#8221;</i><i>&nbsp;</i>o directamente en la base de datos. Al haber usado sqlite, se puede usar la herramienta sqlitemanager para introducir datos en la tabla.</p>
<p>A continuación se va a modificar el modelo. El principal objetivo de este tutorial, es aprender a modificar un modelo de django y que los datos que estaban almacenados con anterioridad, no se pierdan. Editamos southtut/models.py.</p>
<pre><code>class Knight(models.Model):    name = models.CharField(max_length=100)    of_the_round_table = models.BooleanField()    dances_whenever_able = models.BooleanField()</code></pre>
<p>Ahora creamos una migración nueva. Esta migración contiene las modificaciones que se han hecho en los modelos, pero todavía no se han visto reflejadas en las tablas de la base de datos.</p>
<pre><code>./manage.py schemamigration southtut –-auto</code></pre>
<p>y la aplicamos</p>
<pre><code>./manage.py migrate southtut</code></pre>
<p>Al aplicar la migración, la tabla referente al modelo que se ha cambiado reflejará dichos cambios. Si ahora comprobamos los valores de la base de datos, mediante sqlitemanager en nuestro ejemplo, vemos que se mantienen los datos que hemos introducido anteriormente, pero se ha añadido una nueva columna a la tabla.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pablogplanet.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pablogplanet.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pablogplanet.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pablogplanet.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/pablogplanet.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/pablogplanet.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/pablogplanet.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/pablogplanet.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pablogplanet.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pablogplanet.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pablogplanet.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pablogplanet.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pablogplanet.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pablogplanet.wordpress.com/34/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pablogplanet.wordpress.com&amp;blog=13314445&amp;post=34&amp;subd=pablogplanet&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pablogplanet.wordpress.com/2010/06/01/notas-mini-tutorial-django-south/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/94d1e2dfb201f5fd4a845c8bbea4a667?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">lacloaca</media:title>
		</media:content>
	</item>
		<item>
		<title>Nota: git hosting</title>
		<link>http://pablogplanet.wordpress.com/2010/05/14/nota-git-hosting/</link>
		<comments>http://pablogplanet.wordpress.com/2010/05/14/nota-git-hosting/#comments</comments>
		<pubDate>Fri, 14 May 2010 16:17:00 +0000</pubDate>
		<dc:creator>pablo</dc:creator>
				<category><![CDATA[git]]></category>
		<category><![CDATA[nota]]></category>
		<category><![CDATA[varios]]></category>

		<guid isPermaLink="false">http://pablogplanet.wordpress.com/2010/05/14/nota-git-hosting</guid>
		<description><![CDATA[Git es un software de sistema de control de versiones distribuido. Los servicios de git hosting permiten, como su nombre indica, hospedar repositorios de git. He encontrado dos servicios que tienen buena pinta: github.com &#160; Este parece bastante serio. Por &#8230; <a href="http://pablogplanet.wordpress.com/2010/05/14/nota-git-hosting/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pablogplanet.wordpress.com&amp;blog=13314445&amp;post=32&amp;subd=pablogplanet&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Git es un software de sistema de control de versiones distribuido. Los servicios de git hosting permiten, como su nombre indica, hospedar repositorios de git.</p>
<p>He encontrado dos servicios que tienen buena pinta:</p>
<p><a href="http://github.com/">github.com</a> &nbsp; Este parece bastante serio. Por ejemplo tiene el repositorio de Ruby on Rails. La única pega que he encontrado, es que la versión gratuita no tiene proyectos privados. Está orientado al software colaborativo.</p>
<p><a href="http://codaset.com/">codaset.com</a>&nbsp;tiene unas características parecidas al anterior. Está pensado para software libre. Además, es gratuito y te permite controlar la privacidad de tu proyecto. Público, semipúblico o privado son las opciones de privacidad de los proyectos. A parte del repositorio propimente dicho, tiene un web presenta el estado del proyecto, un blog, una wiki, un sistema de tickes&#8230;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pablogplanet.wordpress.com/32/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pablogplanet.wordpress.com/32/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pablogplanet.wordpress.com/32/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pablogplanet.wordpress.com/32/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/pablogplanet.wordpress.com/32/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/pablogplanet.wordpress.com/32/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/pablogplanet.wordpress.com/32/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/pablogplanet.wordpress.com/32/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pablogplanet.wordpress.com/32/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pablogplanet.wordpress.com/32/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pablogplanet.wordpress.com/32/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pablogplanet.wordpress.com/32/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pablogplanet.wordpress.com/32/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pablogplanet.wordpress.com/32/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pablogplanet.wordpress.com&amp;blog=13314445&amp;post=32&amp;subd=pablogplanet&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pablogplanet.wordpress.com/2010/05/14/nota-git-hosting/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/94d1e2dfb201f5fd4a845c8bbea4a667?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">lacloaca</media:title>
		</media:content>
	</item>
		<item>
		<title>Nota Django. Crear una página de comentarios</title>
		<link>http://pablogplanet.wordpress.com/2010/05/11/nota-django-crear-una-pagina-de-comentarios/</link>
		<comments>http://pablogplanet.wordpress.com/2010/05/11/nota-django-crear-una-pagina-de-comentarios/#comments</comments>
		<pubDate>Tue, 11 May 2010 16:14:00 +0000</pubDate>
		<dc:creator>pablo</dc:creator>
				<category><![CDATA[django]]></category>
		<category><![CDATA[nota]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://pablogplanet.wordpress.com/2010/05/11/nota-django-crear-una-pagina-de-comentarios</guid>
		<description><![CDATA[Este post es la continuación de otros post que he realizado sobre el framework Django.&#160;En este post voy a poner un pequeño ejemplo de como se haría una página de comentarios. Creo que es bastante ilustrativo porque toca temas importantes &#8230; <a href="http://pablogplanet.wordpress.com/2010/05/11/nota-django-crear-una-pagina-de-comentarios/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pablogplanet.wordpress.com&amp;blog=13314445&amp;post=31&amp;subd=pablogplanet&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Este post es la continuación de otros post que he realizado sobre el framework Django.&nbsp;En este post voy a poner un pequeño ejemplo de como se haría una página de comentarios. Creo que es bastante ilustrativo porque toca temas importantes de django. Maneja la base de datos (<i>SQLite3</i> en nuestro ejemplo) a través de los modelos de django, se usan plantillas (<i>template</i>) con el gestor de plantillas de django, se genera una página a partir de plantillas en las cual se escriben registros almacenados en la base de datos y se leen datos de un formulario que incluye esa misma página.</p>
<p>Lo primero que hay que hacer es crear el proyecto de django.</p>
<pre><code>django-admin startproject commentweb</code></pre>
<p>Creamos una app que va a tener el modelo que gestiona los comentarios que se almacenan en la base de datos.</p>
<pre><code>python manage.py startapp comments</code></pre>
<p>Añadimos el modelo dentro de <i>commentweb/commments/models.py.</i></p>
<p>
<pre><code>from django.db import models# Create your models here.class Comment(models.Model):    title = models.CharField(max_length = 20)    date = models.DateTimeField()    text = models.TextField(blank = True)</code></pre>
<p>El modelo consta de tres campos:</p>
<ul>
<li>title: título del comentario.</li>
<li>date: fecha de la publicación.</li>
<li>text: contenido del comentario.</li>
</ul>
<p>Ahora hay que modificar el archivo <i>settings.py</i></p>
<p>Base de datos</p>
<pre><code>DATABASE_ENGINE = 'sqlite3'           # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.DATABASE_NAME = 'comments.sqlite'             # Or path to database file if using sqlite3.DATABASE_USER = ''             # Not used with sqlite3.DATABASE_PASSWORD = ''         # Not used with sqlite3.DATABASE_HOST = ''             # Set to empty string for localhost. Not used with sqlite3.DATABASE_PORT = ''             # Set to empty string for default. Not used with sqlite3.</code></pre>
<p>Zona horaria. Se puede consultar en <a href="http://en.wikipedia.org/wiki/List_of_tz_zones_by_name">http://en.wikipedia.org/wiki/List_of_tz_zones_by_name</a></p>
<pre><code>TIME_ZONE = 'Europe/Madrid'</code></pre>
<p>Añadimos el path donde se almacenan los <i>templates</i>.</p>
<pre><code>TEMPLATE_DIRS = (    # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".    # Always use forward slashes, even on Windows.    # Don't forget to use absolute paths, not relative paths.    "/home/user/djangoprojects/commentweb/templates",)</code></pre>
<p>Aplicaciones disponibles. He borrado las que vienen por defecto y he añadido la que hemos creado.</p>
<pre><code>INSTALLED_APPS = (    'commentweb.comments',)</code></pre>
<p>A continuación sincronizamos la base de datos.</p>
<pre><code>python manage.py syncdb</code></pre>
<p>Nos inidica que hemos creado una nueva tabla</p>
<p>Nuestra página web va a tener dos direcciones, por lo tanto debemos editar el fichero <i>commentweb/urls.py</i> para añadirlas.</p>
<p>
<pre><code>from django.conf.urls.defaults import *from commentweb.comments.views import savefrom commentweb.comments.views import comments

urlpatterns = patterns('',    (r'^comments/$', comments),    (r'^save/$', save))</code></pre>
<p>Vamos a crear las páginas <i>&#8216;/comments/&#8217;</i> y <i>&#8216;/save/&#8217;</i>. La página <i>&#8216;/comments/&#8217;</i> mostrará los comentarios que hay almacenados en la base de datos. Además, tendrá un formulario que nos permita añadir nuevos comentarios. La página <i>&#8216;/save/&#8217;</i>&nbsp;almacena un comentario nuevo. Esta página se llama desde el formulario de la página anterior cuando se añade un nuevo comentario. Para gestionar estas páginas hay que crear las funciones comments y save en <i>commentweb/comments/views.py</i>. Pero antes, vamos a crear los <i>templates</i> que usan dichas funciones. En el directorio que hemos añadido anteriormente al archivo settings.py, vamos a crear el template <i>comments.html.</i> A continuación muestro su contenido:</p>
<pre><code>&lt; html&gt;    &lt; head&gt;        &lt; title&gt;Comments&lt; /title&gt;    &lt; /head&gt;    &lt; body&gt;        &lt; form method="post" action="/save/"&gt;            Title&lt; input type="text" size="20" maxlength="20" name="title"&gt; &lt; br /&gt;            &lt; textarea name="text" rows="4" cols="40"&gt;&lt; /textarea&gt;&lt; br/&gt;            &lt; input type="submit" value="Comment!"/&gt;        &lt; /form&gt;        {% for comment in comment_list %}            &lt; h2&gt;{{comment.title}}&lt; /h2&gt;            &lt; p&gt;Date: {{comment.date}}&lt; /p&gt;            &lt; p&gt;{{comment.text}}&lt; /p&gt;        {% endfor %}    &lt; /body&gt;&lt; /html&gt;</code></pre>
<p><b>Nota</b>: he dejado un espacio entre los caracteres &#8216;&lt;&#8217; y la etiquetas para una correcta visualización en el blog. Cuando se use este fichero hay que eliminar dichos espacios.</p>
<p>La plantilla anterior tiene dos partes fundamentales. La primera, es un formulario que permite añadir comentarios. De este formulario es importante el nombre del <i>textarea</i> (<i>name=&#8221;text&#8221;</i>), el nombre de título (<i>name=&#8221;title&#8221;</i>) y que la acción que se ejecuta al pulsar el botón <i>&#8220;Comment!&#8221;</i> (<i>action=&#8221;/save/&#8221;</i>) nos lleva a la página<i>&nbsp;&#8217;/save/&#8217;</i>.  La segunda, es una etiqueta de plantilla for que nos muestra todos los comentarios que están almacenados en la variable <i>comment_list</i>.  A continuación se muestra el <i>template</i> para la página save.html  
<pre><code>

&lt; html&gt;

    &lt; head&gt; 

        &lt; meta http-equiv="Refresh" content="2;url=../comments/"&gt; 

    &lt; /head&gt;

    &lt; body&gt;

        &lt; p&gt;Su comentario ha sido guardado. Por favor esperar a ser redireccionado.&lt; /p&gt;

    &lt; /body&gt;

&lt; /html&gt;

</code></pre>
<p><b>Nota</b>: he dejado un espacio entre los caracteres &#8216;&lt;&#8217; y la etiquetas para una correcta visualización en el blog. Cuando se use este fichero hay que eliminar dichos espacios.  Esta plantilla es muy simple. Nos muestra un mensaje diciendo que el comentario de ha guardado y pasado 2 segundos nos redirecciona otra vez a la página comments. El proceso en el que se guarda el comentario en la base de datos se realiza en la función que invoca este <i>template</i> desde la vista.      A continuación, vamos a ver las funciones que generan las vistas.  </p>
<pre><code>from commentweb.comments.models import Comment

from django.shortcuts import render_to_response

import datetime

# Create your views here.

def comments(request):

    comment_list = Comment.objects.all()

    return render_to_response('comments.html', {'comment_list': comment_list})

def save(request):

    txt = request.POST["text"]

    title = request.POST["title"]

    comment = Comment()

    comment.text = txt

    comment.date = datetime.datetime.now()

    comment.title = title

    comment.save()

    return render_to_response('save.html', None)

</code></pre>
<p>La funcion <i>comment</i> obtiente una lista de todos los comentarios que hay en la base de datos. Esta función retorna la salida de la función <i>render_to_response </i>que tiene dos parametros de entrada. El primero es el template con el que se crea la página. El segundo, es un diccionario que contiene los valores de las variables que hay en las plantillas. La clave del diccionario es una cadena que corresponde al nombre de la variable que usa el template ({{comment_list}} en este caso) y valor del diccionario, es el valor que la variable va a tomar durante la ejecución. </p>
<p>Una vez realizado esto, nuestro ejemplo ya está terminado. Para poder comprobar su funcionamiento es necesario ejecutar el servidor de pruebas que trae django.</p>
<pre><code>python manage.py runserver</code></pre>
<p>la dirección de nuestra nueva página es:</p>
<p><a href="http://127.0.0.1:8000/comments/">http://127.0.0.1:8000/comments/</a></p>
<p>Una vez realizado todos los pasos anteriores, nuestra nueva página ya nos debería permitir introducir nuevos comentarios.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pablogplanet.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pablogplanet.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pablogplanet.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pablogplanet.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/pablogplanet.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/pablogplanet.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/pablogplanet.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/pablogplanet.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pablogplanet.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pablogplanet.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pablogplanet.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pablogplanet.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pablogplanet.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pablogplanet.wordpress.com/31/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pablogplanet.wordpress.com&amp;blog=13314445&amp;post=31&amp;subd=pablogplanet&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pablogplanet.wordpress.com/2010/05/11/nota-django-crear-una-pagina-de-comentarios/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/94d1e2dfb201f5fd4a845c8bbea4a667?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">lacloaca</media:title>
		</media:content>
	</item>
	</channel>
</rss>
