views:

217

answers:

3

I am running the development version of Django and it appears that the filebrowser app is not compatible with trunk because of changes made to CSRF. How do I downgrade to the official release (1.1)?

I am working on a shared host and the way that I am curently running Django is as follows:

~/local/lib/python2.6/site-packages/ contains /django/ as well as several other folders (one for each app).

~/local/lib/python2.6/site-packages/ is on the python path.

Within /site-packages/ there is also a symlink to /projectname/ that contains the project files (manage.py, settings.py, etc.).

I am using FastCGI and therefore in /public_html/ I have a dispatch.fcgi that is used to call django.core.servers.fastcgi.runfastcgi. A .htaccess file is used to redirect all requests to dispatch.fcgi so that Django can handle them.

I tried removing (moving out of the python path) /django/ and then downloading the release version of Django and putting it where the previous /django/ folder was. This produced the following error:

No module named CSRF.

I downloaded middleware/csrf.py from /trunk/ which cleared up the first error but then produced other errors.

How should I go about downgrading to 1.1? Starting from scratch isn't out of the question but I'd obviously rather avoid this if possible.

A: 

Look in your /site-packages/ directory for Django-1.other_stuff.egg-info files and delete any you find, then try again (with the code for 1.1 still in the site-packages/django/ directory. If this doesn't work, just re-run the Django installer from the latest release tarball (python setup.py install) and you should be good.

Alternatively, if you have pip installed you can probably just do pip install -U Django==1.1.1 in the terminal.

Note the capital D in Django in those egg-info files and the pip command.

John Debs
Using python setup.py install is out of the question unfortunately as I do not have sufficient rights to edit anything within /usr/ (I can only modify /home/username/
Pheter
I forgot to add: There were no .egg files either.
Pheter
Which version of Django did you create the project with? If you created the project with trunk, start over using 1.1 assuming you haven't gotten too far. There are changes to the default settings.py (in particular, loading those new CSRF middleware) that won't work with older version of Django.On a separate note, you should consider using virtualenvs with your host (http://pypi.python.org/pypi/virtualenv) to isolate and better control your environment.
John Debs
+1  A: 

I have managed to successfully downgrade and it is actually an extremely easy process. Hopefully this will help people out who overlook what I did.

The startproject command of django-admin.py in 1.1.1 creates a slightly different settings.py file than the current development release.

startproject in with the current dev release has an extra middleware class - csrf. The startproject command in 1.1.1 creates the same settings.py but with the third class removed. Commenting out or removing this line gets Django working properly.

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware', #additional middleware class
    'django.contrib.auth.middleware.AuthenticationMiddleware',
)
Pheter
A: 

you can just install django of the version you want in you user space, say in /home/me/lib/

then if you are using mod_wsgi in your mysite.wsgi have a line:

sys.path.insert(0,'/home/me/lib/Django-1.1')

this will insure that django is loaded from your installation, not the server-wide.

you'll also need to adjust your shell environment path variable so that correct django-admin.py is launched or just run directly

python /home/me/lib/Django-1.1/django/bin/django-admin.py ...
Evgeny