[ x ]

Faig servir les cookies de Google Analytics per al control de visites i estadístiques..
És una pardalada, però la llei diu que us he d'avisar, ja veus. Així que si visitau aquest blog donau-vos per informats o sortiu ara mateix i netejau les cookies del vostre navegador. Si continuau llegint, suposaré que ja us està bé. Si vols saber com llevar les cookies del teu navegador: aquí ho pots trobar

Planes estàtiques amb Flatpages

Fa estona que volia posar contingut no directament relacionat amb el Blog a Trespams, ja sabeu, quí soc, sobre el blog i coses d'aquests, però no ho arribava a fer. Finalment m'he decidit i aprofitaré per explicar com podem fer aquest tipus de coses amb Django.

El primer de tot és centrar el problema. L'objectiu és tenir lligat a la nostra aplicació (el blog en aquest cas) un conjunt de planes que no estan relacionades amb l'aplicació o aplicacions, que no han de ser editades o ho han de ser molt poc.

El cas típic són les planes de condicions legals, les planes de "sobre mi" dels blogs. Agafau la idea, no?

Com que és un cas molt comú Django té una aplicació al contrib pensada per fer precisament això. Ens proporciona un formulari on podem posar el títol, el contingut en format html i indicar si volem la plantilla que s'utilitzarà, si permetem comentaris o no i si l'usuari ha d'estar registrat al sistema per veure la plana. Aquesta aplicació se'n diu Flatpages.

La documentació de Django està força ben explicada.

  1. Afegim 'django.contrib.sites' a INSTALLED_APPS del nostre setting.py si no hi és ja. Si no hi era convé fer un syncdb. Crearem una entrada al Sites amb la nostra url i també posarem el SITE_ID del settings.py el valor de l'id d'aquest registre. Si sols en teniu un serà 1.

  2. Afegim 'django.contrib.flatpages' als INSTALLED_APPS.

  3. Afegim 'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware' a MIDDLEWARE_CLASSES del settings.

  4. Executam python manage.py syncdb per a generar les taules de Flatpages.

  5. Cream el directori flatpages dins el nostre directori de templates i cream l'arxiu d'default.html. Aquesta serà la plantilla per defecte que s'utilitzarà. Hem de personalitzar-la com volguem. A aquesta plantilla flatpages li passa la variable flatpage, a partir de la qual podem obenir el títol i el cos del text amb {{flapage.title}} i {{flatpage.content}}. Podeu fer una ullada al codi de trespams del svn per tenir-ho més clar.

Ara ja sols és cosa d'anar afegint registres amb les urls i continguts que volguem. Django en no trobar una plana abans de mollar un 404 el que farà és anar a flatpages, si la url correspon a una que hagem definit generarà la plana a partir de la plantilla i els continguts del registre corresponent.

Per acabar, dir que no fa falta posar el filtre safe a les variables. Per defecte se suposa que l'html és segur, ja que no està pensat per a que un usuari extern a l'aplicació l'editi.

Comentaris
  1. guillem guillem on 21/11/2009 12:44 #

    Una cosa a tenir en compte és que no suporten explícitament multi llenguatge. La millor forma de fer-ho potser és utilitzant el projecte django-multilingual:
    http://code.google.com/p/django-multilingual/

    Aquest projecte esta bé per tenir multi llenguatge als models de forma dinàmica, no obtsant s'ha de vigilar amb l'herència de classes, ja que el projecte necessita d'un patch per a funcionar correctament.

  2. aaloy aaloy on 21/11/2009 13:13 #

    Guillem, tingues en compte que Flatpages són una solució ràpida per a casos molt concrets. Si necessites multillenguatge en aquest tipus de planes faries quel com com `/ca/sobre-mi/` i '/en/about-me/` encara que això signifiqui tenir que mantenir dos registres per separats, tanmateix se suposa que n'hi haurà pocs.

    Les aplicacions que hi ha per gestionar llocs multi-llenguatge el que fan és permetre'ns lligar les diferents traduccions. Segons el lloc web serà millor (més senzilla) una solució o una altra.

Els pingbacks estan tancats.