Correct way to get absolute url in django

Posted by dreamiurg on Stack Overflow See other posts from Stack Overflow or by dreamiurg
Published on 2010-04-28T12:29:40Z Indexed on 2010/04/28 12:33 UTC
Read the original article Hit count: 425

A problem that I stumbled upon recently, and, even though I solved it, I would like to hear your opinion of what correct/simple/adopted solution would be.

I'm developing website using Django + python. When I run it on local machine with "python manage.py runserver", local address is http://127.0.0.1:8000/ by default.

However, on production server my app has other url, with path - like "http://server.name/myproj/"

I need to generate and use permanent urls. If I'm using {% url view params %}, I'm getting paths that are relative to / , since my urls.py contains this

urlpatterns = patterns('',

(r'^(\d+)?$', 'myproj.myapp.views.index'), (r'^img/(.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT + '/img' }), (r'^css/(.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT + '/css' }), )

So far, I see 2 solutions:

  1. modify urls.py, include '/myproj/' in case of production run
  2. use request.build_absolute_uri() for creating link in views.py or pass some variable with 'hostname:port/path' in templates

Are there prettier ways to deal with this problem? Thank you.

© Stack Overflow or respective owner

Related posts about django

Related posts about python