我想在模板中获取绝对网址。我无法使用网址。它给了我一个相对的URL。我需要得到这个:
http://domain.tld/article/post
但是Django只给了我
/article/post
我玩过settings.py但是没用。 (debug = false,允许主机vs。)
模板代码:
{% url 'blog:detail' blog.slug %}
答案 0 :(得分:31)
在视图中这很容易做到。例如:
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
。
如果你想在模板中这样做,你可以创建自己的模板标签而不会有太多麻烦。
答案 1 :(得分:7)
经过长时间与Django的会面后,我学到了很多东西。对于此问题,我创建了一个绝对URL模板标签。
将此添加到模板标记中,然后使用默认的url标记:
{% absurl 'some-view' with, arguments %}
Here is the Gist for the absolute 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',
)