使用Django根据位置显示内容

使用Django根据位置显示内容,django,Django,如何根据用户所在的位置为其显示内容 例如,如果我只想为加拿大的用户而不是美国的用户显示一个博客部分,那么我如何将Django作为最佳实践 我还没有找到解释它如何工作的东西。您可以使用api获取位置并在django视图中使用它。例如: import requests # pip install requests def myview(request): x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR') if

如何根据用户所在的位置为其显示内容

例如,如果我只想为加拿大的用户而不是美国的用户显示一个博客部分,那么我如何将Django作为最佳实践

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

您可以使用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)
导入请求#pip安装请求
def myview(请求):
x_forwarded_for=request.META.get('HTTP_x_forwarded_for'))
如果x_转发了以下内容:
ipaddress=x_已转发_for.split(',')[-1].strip()
其他:
ipaddress=request.META.get('REMOTE\u ADDR')
ipinfodb_data=requests.get('http://api.ipinfodb.com/v3/ip-country/?key=&ip={0}.格式(ipaddress))
country=ipinfo-db.text.split(“:”)[4]
上下文=dict()
如果国家美国:
context['blog']=blog.objects.all()
#根据上下文做其他事情
返回render_to_response('my_template.html',
上下文=上下文)
模板应如下所示:

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

这很可能取决于您如何定义特定区域可以使用的内容,周围有地理库,允许您根据位置进行过滤,但它们都需要您在某处定义位置