Django 获取绝对 URL

20 浏览
0 Comments

Django 获取绝对 URL

我想在模板中获取绝对URL。我用url标签无法实现,它给我一个相对URL。我需要获取这个:

http://domain.tld/article/post

但是Django只给我

/article/post

我在settings.py中尝试过但没有成功。(debug=false, allowed hosts等)模板代码:

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

0
0 Comments

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传递给模板即可。如果希望在模板中实现这个功能,可以创建自定义的模板标签。

0
0 Comments

在使用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开发服务器以加载新添加的模板标签。

0