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
.
Если вы хотите сделать это в шаблоне, вы можете создать свой собственный тег шаблона без особых проблем.