Django Получить Абсолютный URL

Я хочу получить абсолютный url в шаблонах. Я не могу сделать с url. Это дает мне относительный URL. Мне нужно это сделать:

http://domain.tld/article/post

но Django дает мне просто

/article/post

Я играл с settings.py, но это не сработало. (debug = false, разрешенные хосты против.)

Код шаблона:

{% url 'blog:detail' blog.slug %}

Ответы

Ответ 1

После долгой встречи с Django я многому научился. Для этой проблемы я создал абсолютный шаблон templatetag URL.

Добавьте это в теги шаблона, а затем используйте, например, тег url по умолчанию:

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

Вот список Gist для абсолютного шаблона URL шаблона, вам нужно добавить объект запроса в template_context_processors, иначе это не сработает. Для этого откройте ваши settings.py и добавьте следующие строки:

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

Ответ 2

Это легко сделать в представлении. Например:

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)

Затем в вашем шаблоне, пока вы зацикливаетесь на {% for postobj in posts %} вы можете получить доступ к postobj.post и postobj.url.

Если вы хотите сделать это в шаблоне, вы можете создать свой собственный тег шаблона без особых проблем.