Django Get Absolute URL

前端 未结 2 1385
南笙
南笙 2020-12-29 09:17

I want to get absolute url in templates. I can\'t do with url. It gives me a relative URL. I need to get this:

http://domain.tld/article/post
相关标签:
2条回答
  • 2020-12-29 09:35

    This is easy to do in a view. For example:

    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)
    

    Then, in your template, while you're looping with {% for postobj in posts %} you can access postobj.post and postobj.url.

    If you want to do this in the template instead you can probably create your own template tag without too much trouble.

    0 讨论(0)
  • 2020-12-29 09:50

    After a long time meeting with Django, I learned a lot of things. For this issue, I created an absolute URL templatetag.

    Add this to your template tags, then use like default url tag:

    {% absurl 'some-view' with, arguments %}

    Here is the Gist for the absolute URL templatetag, you will need to add request object to template_context_processors, otherwise this will not work. To achieve this, open your settings.py and add these following lines:

    from django.conf import global_settings
    TEMPLATE_CONTEXT_PROCESSORS = global_settings.TEMPLATE_CONTEXT_PROCESSORS + (
        'django.core.context_processors.request',
    )
    
    0 讨论(0)
提交回复
热议问题