.. _intro-tutorial01: ===================================== Writing your first site, part 1 ===================================== Throughout this tutorial, we'll walk you through the creation of a web site dedicated to wine. If you are in a hurry and want to see facts and no words, the web site is called ``vinoweb`` and it is included in the ``examples`` directory. We'll assume you have django__ and :ref:`djpcms installed ` already. You can tell ``djpcms`` is installed by running the Python interactive interpreter and typing ``import djpcms``. If that command runs successfully, with no errors, djpcms is installed. You can even run the tests:: import djpcms djpcms.runtests() .. admonition:: Where to get help: If you're having trouble going through this tutorial, please post a message to `djpcms-users`__. __ http://www.djangoproject.com/ __ http://groups.google.co.uk/group/djpcms-users Creating vinoweb ================================= First thing is to create a new Django project. From the command line, ``cd`` into a directory where you'd like to store your code, then run the command:: django-admin.py startproject vinoweb This will create a ``vinoweb`` directory. Move into the directory and create the application we will use in the site:: django-admin.py startapp vino Great, your directory structure should look like this:: vinoweb/ vino/ __init__.py models.py tests.py views.py __init__.py appurls.py manage.py settings.py urls.py Edit the :file:`vino/models.py` file and add the django models for this application (cut and paste from :file:`djpcms/examples/vinoweb/vino/models.py` file). Setting up djpcms ============================= Change into the :file:`vinoweb` directory and edit the :file:`setting.py` file and add at least the following applications to `INSTALLED_APPS`_:: INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.sites', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.admin', 'djpcms', 'vino' ) and add ``djpcms.core.context_processors.djpcms`` to `TEMPLATE_CONTEXT_PROCESSORS`_:: TEMPLATE_CONTEXT_PROCESSORS = ( "django.contrib.auth.context_processors.auth", "django.core.context_processors.debug", "django.core.context_processors.i18n", "django.core.context_processors.media", "django.contrib.messages.context_processors.messages", "djpcms.core.context_processors.djpcms" ) .. _TEMPLATE_CONTEXT_PROCESSORS: http://docs.djangoproject.com/en/dev/ref/settings/#template-context-processors .. _INSTALLED_APPS: http://docs.djangoproject.com/en/dev/ref/settings/#installed-apps Let's verify this worked:: python manage.py validate 0 errors found. good. Templates and media ================================ Create a new directory ``templates`` and add template :file:`root.html` file:: {% extends "djpcms/root.html" %} and the :file:`base.html` file:: {% extends "djpcms/base.html" %} the :file:`djpcms/base.html` is a battery included template for quick development. You can also use your own, but let's stick with this for now. Edit the :file:`settings.py` file and add the lines:: import os basedir = os.path.split(os.path.abspath(__file__))[0] TEMPLATE_DIRS = (os.path.join(basedir,'templates'),) Let also create a ``media`` directory containing the static files. This directory will contains another directory called ``site`` and a cascade style sheet file file:`vino.css`. In your settings file replace the default media settings with these:: ADMIN_MEDIA_PREFIX = '/media/admin/' MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(basedir, 'media') .. _intro-tutorial-urls: Urls ======================== Last step of this first tutorial concerns the setting up of ``urls``. First edit the :file:`urls.py` which was created when we started the project and replace its content with:: from djpcms.urls import * urlpatterns = site_urls.patterns() Second, edit the :file:`settings.py` and add the ``djpcms`` specific :setting:`APPLICATION_URL_MODULE` setting:: APPLICATION_URL_MODULE = 'vinoweb.appurls' This module, which can be empty, will be imported by ``djpcms`` during the ``urls`` setup. We will add code further on in our tutorial. .. _intro-files: Great, we've done a lot, your project should look like this:: vinoweb/ media/ site/ vino.css templates/ base.html root.html vino/ __init__.py models.py tests.py views.py __init__.py appurls.py (empty) manage.py settings.py (modified) urls.py (modified) Just one last thing, add the database information to the settings file, and run ``syncdb``:: python manage.py syncdb Ready to add contents? Go to the :ref:`next tutorial `.