Django Get Absolute URL

After a long time meeting with Django, I learned a lot of things. For this issue, I created an absolute URL templatetag.

Add this to your template tags, then use like default url tag:

{% absurl 'some-view' with, arguments %}

Here is the Gist for the absolute URL templatetag, you will need to add request object to template_context_processors, otherwise this will not work. To achieve this, open your settings.py and add these following lines:

from django.conf import global_settings
TEMPLATE_CONTEXT_PROCESSORS = global_settings.TEMPLATE_CONTEXT_PROCESSORS + (
    'django.core.context_processors.request',
)

This is easy to do in a view. For example:

from django.core.urlresolvers import reverse

def Home(request): 
    posts = Article.objects.filter(published=True).order_by('-publish') 
    site = Site.objects.get_current()

    c = RequestContext(request, { 
        'posts': [{'post': post,
                   'url': request.build_absolute_uri(reverse('blog:detail', args=[post.slug]))}
                  for post in posts]
        'site': site,
    }) 

    return render_to_response('templates/index.html', c)

Then, in your template, while you're looping with {% for postobj in posts %} you can access postobj.post and postobj.url.

If you want to do this in the template instead you can probably create your own template tag without too much trouble.