使用Django显示基于位置的内容

时间:2016-01-27 15:54:05

标签: django

如何根据用户的位置显示用户的内容?

例如,如果我只为加拿大的用户显示博客部分而不为美国的用户显示。如何将Django作为最佳实践来做到这一点?

我没有找到解释它是如何工作的东西。

1 个答案:

答案 0 :(得分:0)

您可以使用IPInfoDB's api获取位置并在django视图中使用它。例如:

import requests  # pip install requests

def myview(request):
    x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')

    if x_forwarded_for:
        ipaddress = x_forwarded_for.split(',')[-1].strip()
    else:
        ipaddress = request.META.get('REMOTE_ADDR')

    ipinfodb_data = requests.get('http://api.ipinfodb.com/v3/ip-country/?key=<your_key_from_ipinfodb>&ip={0}'.format(ipaddress))
    country = ipinfodb.text.split(':')[4]
    context = dict()

    if country != 'United States':
       context['blog'] = Blog.objects.all()

    # do other stuff in context
    return render_to_response('my_template.html',
                          context=context)

模板应如下所示:

{% if blog %} 
{% for b in blog %}
{{ b.title }}: {{ b.author }}
{% endfor %}
{% else %}
<!-- do stuff -->
{% endif %}