Django 获取绝对 URL
Django Get Absolute URL问题的出现原因是在模板中想要获取每篇文章的绝对URL。解决方法是在视图中使用build_absolute_uri()函数来构建URL,并将URL传递给模板。
解决方法如下所示:
1. 在视图中导入reverse函数和Site对象:
from django.core.urlresolvers import reverse from django.contrib.sites.models import Site
2. 在视图函数中使用build_absolute_uri()函数构建URL,并将URL传递给模板:
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)
3. 在模板中使用循环来遍历每篇文章,并使用postobj.url来访问每篇文章的绝对URL:
{% for postobj in posts %} {{ postobj.post }} {{ postobj.url }} {% endfor %}
如果希望在模板中实现这个功能,可以创建自定义的模板标签来实现。
这个问题的解决方法非常简单,只需要在视图中使用build_absolute_uri()函数来构建URL,并将URL传递给模板即可。如果希望在模板中实现这个功能,可以创建自定义的模板标签。
在使用Django时,我遇到了一个问题,我想要创建一个绝对URL的模板标签。为了解决这个问题,我创建了一个绝对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', )
你可能还需要加载这个模板标签,在模板的顶部添加{% load absurl %}
。
非常棒的解决方法,谢谢。记得重启Django开发服务器以加载新添加的模板标签。