Django получить абсолютный URL
Я хочу получить абсолютный url в шаблонах. Я не могу сделать с url. Это дает мне относительный URL. Мне нужно получить это:
http://domain.tld/article/post
но Джанго дает мне просто
/article/post
я играл с settings.py но это не сработало. (debug=false, разрешенные хосты против)
код шаблона:
{% url 'blog:detail' blog.slug %}
2 ответов
это легко сделать в виде:
from django.core.urlresolvers import reverse
url = request.build_absolute_uri(reverse('blog:detail', args=[blog.slug]))
Если вам нужно сделать это в шаблоне, вы можете создать свой собственный тег шаблона без особых проблем.
редактировать
предполагая, что вы хотите сделать это в ваш Home
view, вы можете сделать что-то вроде этого:
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
.
после долгой встречи с Джанго я узнал много вещей. Для этой проблемы я создал абсолютный url templatetag.
добавьте это в теги шаблона, а затем используйте как url-адрес по умолчанию:
{% absurl 'some-view' with, arguments %}
вот суть абсолютного url templatetag, вам нужно будет добавить объект запроса в template_context_processors, иначе это не сработает. Чтобы достичь этого, откройте settings.py и добавьте следующие строки:
from django.conf import global_settings
TEMPLATE_CONTEXT_PROCESSORS = global_settings.TEMPLATE_CONTEXT_PROCESSORS + (
'django.core.context_processors.request',
)