User Tools

Site Tools


doc:appunti:prog:django

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Last revisionBoth sides next revision
doc:appunti:prog:django [2011/02/20 11:02] – [Permessi] niccolodoc:appunti:prog:django [2011/06/26 11:49] – [Mettere i dati nella vista] niccolo
Line 9: Line 9:
  
 ===== Progetto e applicazioni ===== ===== Progetto e applicazioni =====
 +
 +  * **Progetto**
 +  * **Applicazione**: Contenitore di viste (pagine web) e modelli di dati (tabelle del database).
  
 Per creare un **nuovo progetto**: Per creare un **nuovo progetto**:
Line 93: Line 96:
 **NOTA**: il comando syncdb si accorge se una tabella esiste già oppure deve essere creata, ma ad esempio non si accorge se una colonna deve essere aggiunta oppure è stata modificata. **NOTA**: il comando syncdb si accorge se una tabella esiste già oppure deve essere creata, ma ad esempio non si accorge se una colonna deve essere aggiunta oppure è stata modificata.
 ===== L'applicazione admin ===== ===== L'applicazione admin =====
 +
 +Vedere **[[http://docs.djangoproject.com/en/1.2/ref/contrib/admin/|The Django admin site]]**.
  
 Le oprazioni di base sui dati (i //modelli//, cioè le tabelle del database), vale a dire INSERT, DELETE, UPDATE, ecc. possono essere fatti con l'applicazione fornita con **''django.contrib.admin''**. È sufficiente attivarla nel nostro progetto. Le oprazioni di base sui dati (i //modelli//, cioè le tabelle del database), vale a dire INSERT, DELETE, UPDATE, ecc. possono essere fatti con l'applicazione fornita con **''django.contrib.admin''**. È sufficiente attivarla nel nostro progetto.
Line 142: Line 147:
 admin.site.register(Expense, ExpenseAdmin) admin.site.register(Expense, ExpenseAdmin)
 </code> </code>
 +
 +===== Creare una nuova pagina =====
 +
 +==== Vista ====
 +
 +Nel file **''my_app/views.py''** si definisce una funzione Python che restituisce una pagina web, questa sarà una **vista** della nostra applicazione:
 +
 +<code python>
 +from django.http import HttpResponse
 +
 +def my_view(request):
 +    output = u'''
 +        <html>
 +        <body>
 +        <h1>%s</h1>
 +        </body>       
 +        </html>
 +    ''' % (
 +        u'Titolo della vista'
 +    )
 +    return HttpResponse(output)
 +</code>
 +
 +==== URL ====
 +
 +Nel file **''urls.py''** contenuto alla radice del progetto si mappa un nuovo URL sulla vista, cioè sulla funzione Python definita in precedenza nel modulo ''my_project.views''. L'URL viene aggiunto nell'array **''urlpatterns''**, oltre agli altri eventualmente esistenti:
 +
 +<code python>
 +from my_app.views import *
 +
 +urlpatterns = patterns('',
 +    (r'^my_url/', my_view),
 +)
 +</code>
 +
 +La pagina sarà visibile all'URL **''/my_url/''** (vedere più avanti come configurare l'URL base del progetto).
 +==== Mettere i dati nella vista ====
 +
 +Invece di includere il codice HTML direttamente nella vista (funzione Python) si utilizza il sistema dei **template**.
 +
 +Nella directory radice del progetto si crea la sottodirectory **''templates''** e nel file **''settings.py''** si definisce la **''TEMPLATE_DIRS''** (controllare se il modulo os.path è già incluso):
 +
 +<code python>
 +import os.path
 +
 +TEMPLATE_DIRS = (
 +    os.path.join(os.path.dirname(__file__), 'templates),
 +)
 +</code>
 +
 +Quindi si crea il file **''templates/my_view.html''** che conterrà dei segnaposto del tipo **''%%{{nome}}%%''** che verranno sostituiti a runtime:
 +
 +<code html>
 +<html>
 +<body>
 +  <h1>{{page_title}}</h1>
 +  <p>{{page_body}}</p>
 +</body>
 +</html>
 +</code>
 +
 +Infine si modifica il codice della vista:
 +
 +<code python>
 +from django.http import HttpResponse
 +from django.template import Context
 +from django.template.loader import get_template
 +
 +def my_view(request):
 +    template = get_template('my_view.html')
 +    variables = Context({
 +        'page_title': u'Titolo della vista',
 +        'page_body':  u'Contenuto della pagina'
 +    })
 +    output = template.render(variables)
 +    return HttpResponse(output)
 +</code>
 +
 +FIXME Da fare:
 +
 +  * Aggiungere nella vista l'importazione del modello dati.
 +  * Aggiungere nel template l'iterazione per mostrare tutti gli oggetti del modello.
 +  * Trovare il modo per mostrare i dati aggregati (somma di un campo, ecc.).
 ===== Webserver di test ===== ===== Webserver di test =====
  
doc/appunti/prog/django.txt · Last modified: 2011/06/28 09:15 by niccolo