setting up django fun

5 minute read

Just notes on what I’m up to in trying to get django to work for my Computer Science 462 class. I find this helpful for remembering where I left off and commands etc. But you will probably find it very boring unless you try and do the same.

using tutorial at


Found I needed root priviledges, so I allowed the default users, ‘ubuntu’ root priledges by calling

so I logged into bash as root by just typing

|sudo bash

then editing the /etc/sudoers file by typing


and adding changing the line from

root ALL=(ALL) ALL


ubuntu,root ALL=(ALL) ALL


I edited the settings file, and configured stuff for sqlite3, like the tutorial suggested.

then, as it suggested, ran

python syncdb

which created the database file where I wanted it in /var/django/db/mikeServ.db

tried to view the schemas by typing


with no luck. googled how to view schemas in sqlite.

Googled what the matter might have been, found I needed pysqlite2, so ran

|aptitude search pysqlite2

found it, and ran

|apt-get install python-pysqlite2

but still can’t find anywhere how to use it really, nor what comes with that package

bah. I’ll just assume it worked for now, even thought I can’t check it. we shall see.

I want to use django for a class project which really doesn’t require a local database, just using ajax and templates, so I skipped over the rest of the first page of teh tutorial having to do with creating objects/tables, but it seeemd good.

was interested in the admin pages to work, so I followed the instructions on teh next page:

added django.contrib.admin to INSTALLED_APPS in,

and ran

|python syncdb

then edited as indicated.

Tried to run the /admin/ pages, but no go. I think I might need to restart the webserver:

|/etc/init.d/apache2 restart

When I visited my site ( the next time, made some progress: got an error message! somethign about indentatino error in, so I’ll go fix taht. (Found the compy was right: forgot to remove preceding white-space when uncommenting).

Now though, I’m getting a 500 error with no real helpful input. Hmm. progress? probably. I bet the error is coming from not reaaally having the database schemas, though I ran syncdb ‘n all. I should verify those exist for reals.

I foudn the problem was I don’t have django stuff on my path, as explained in I just need to add my file to the PATH, and some DJANGO_SETTINGS.

Trouble with that, some help also on

Found that didn’t permanently solve anything. (This forum page has a good explanation of different config files like .bashrc and .bashprofile and stuff:

Eventually, found an easy way to add to the PYTHONPATH is just to add a file named whatever.pth to something that already is on a the pythonpath (like /usr/local/lib/python2.6/dist-packages) and in that file write nothing but the path to whatever I want to add to the python path.

Still the DJANGO_SETTINGS_MODULE isn’t found.

Then I realized I had edited the wrong .bashrc file. I edited /.bashrc, when really I should ahve edited ~/.bashrc. bah!

So edited taht file instead, restarted teh command-prompt shell, and voila!

I could verify that PYTHONPATH was set by typing in


into the shell and it would print it out

However, I’m still getting a 500 error on teh admin pages.

Added a symbolic link to the admin media stuff like suggested on, but that didn’t resolve it.

Now I’m looking at

Ok, more of the same. But I’m onto something now.

I thought I really needed to see some better error logs. So I searched for where are the apache error logs, and found it’s at:

/var/log/apache2/error.log, right next to the access.log (I didn’t know they were seperate). I then noticed what the error seems to be:

[Sat Jan 29 16:25:55 2011] [error] [client] OperationalError: attempt to write a readonly database

meaning the sqlite file that its trying to write to is set to be read-only. Which kinda makes sense. So I’m gonna check what the files permissions are, and change them to amke them write-whatever-you-want. (Did that by going to the file, which I placed in /var/django/db/mikeServ.db and did the command chmod 777 mikeServ.db)

and BOOM BABY! Admin console!

Except I didn’t create the symbolic link to the media files right.

And then I noticed it stillw asn’t redirecting quite right. So I needed to edit the apache config file some more. Basically, I needed to make apache get the media files from where they’re at on the server. So I added these lines to my /etc/apache2/sites-available/default file:

Alias /media/ /usr/lib/pymodules/python2.6/django/contrib/admin/media/

Order deny,allow

Options Indexes

Options FollowSymLinks

Allow from all


ok so now I’m trying to get some pages to work,

I ran

|python startapp view

|” ” ” list

|” ” ” home

to create 3 ‘apps’ I guess that will host my files

and added those 3 things to my list of installed apps

and another issue is I’m not sure if is on my filepath. …actually immediately remembered: it is, just under a different name, it’s under django-admin (no ‘.py’)

so I finished those files, as follows:


Create your views here.

from django.http import HttpResponse

from django.template import Context, loader, Template

import urllib2

import json

def popular(req):

t = loader.get_template(‘popular.tmpl’)

return HttpResponse(t.render({}))

def recent(req):

t = loader.get_template(‘recent.tmpl’)



c = Context({‘imagelist’: dictResponse[‘images’],’nextsubmitdate’:dictResponse[‘nextsubmitdate’],’nextratesort’:dictResponse[‘nextratesort’]})

return HttpResponse(t.render(c))


and then the template:


.listitem {

margin-bottom: 2em;


.listitem a {


margin-right: 2em;


Recent Images

{% for image in imagelist %}


Submitted by {{image.submituser}} on {{image.submitdate}}

{% endfor %}

{% if nextsubmitdate %}

More Images …

{% endif %}


the ta gave the template to us originally in some ‘cheetah’ python template language, but converting it to django’s template language was easy: the semantics (the way it works) are just the same, just silly difference in syntax.

and voila! I have a page which renders! bwahahaha!

I noticed the page was missing headers, css stuff, etc.

After inspecting the templates, I realized they had no declaration of etc, or importing of css files. Reason: I wasn’t using the main template at all!

Apparently Cheetah works differently from django’s template. In Cheetah the parent template imports the others by just inserting $main somewhere in teh html. IN django, you need a tag in the parent saying

{% block WHATEVER %}{%endblock%} and in the child template, you need to start with {


and then

{%block WHATEVER%} {%endblock%} (note that the names must match)

And then when it loads the child template, it’ll look for teh parent, load it, and insert the child template where indicated.

About that css stuff. Sure enough, it wasn’t finding the css.

I read somewhere about how you can serve static files simply using apache. That makes sense, but I think somehow my django config was interfering with the usual serving of static files from my directory of /var/www.

So, I poked around and noticed that I could just add

(r’^site_media/(?P.*)$’, ‘django.views.static.serve’,{‘document_root’: ‘./site_media’,’show_indexes’: True}),

to my list of urlpatterns in But it wasn’t working.

After a bit, i noticed the reason: ‘./site_media’ was meant to point to where the static files folder was located on the hard drive. I suppose it’s meant to be a relative uri, but it wasn’t working. Switched it to a absolute uri and it worked.

Starting making another page which was basically identical to my first one

(which just sends out a request and then parses it into a json object and displays it) and got a goofy error saying something about how the dict module had no function named ‘push’. Really random. I saw it before htough. And I had the advantage of this page being basically the exact same as the previous one. So I compared them: identical. Then I remembered: sometimes you need to restart apache for the python to get reloaded. So restarted apache and it worked.

wanted to be able to log stuff on my server.

SO, I followed the instructions on,

and added ‘site_logging’ to my list of installed apps, and added the file in the root of my django/mikeServ directory. Then called logging as instructed (even though I would have thought I should have been calling ‘site_logging’, but just ‘logging’ did it.)

Viewed the error log using

|tail -f /var/log/apache2/error.log


Leave a Reply