【问题标题】:Django get user timezone in templateDjango在模板中获取用户时区
【发布时间】:2014-06-28 00:29:45
【问题描述】:

我正在以 UTC 格式保存日期。我不想将该日期更改为自动用户时区。

我的设置

USE_TZ = True

我的模板

{% for sale in sales %}
    date : {{sale.date}}
{% endfor %}

我试过 django-tz-detect

https://github.com/adamcharnock/django-tz-detect

但我无法正确实现。

请提出解决此问题的好方法。

【问题讨论】:

  • 我们在这里处理的是用户对象吗?例如,我们可以将他们的时区存储在他们的个人资料中吗?它会比试图检测它更简单,也可能更准确。

标签: python django timezone django-timezone


【解决方案1】:

我从here得到了解决方案

我创建了一个视图函数

@login_required 
@ajax_required
@require_GET
def set_user_timezone(request): 
    timezone = request.GET.get('timezone')
    request.session["set_user_timezone"] = timezone
    response_data = {}
    response_data['status'] = 'true'
    response_data['message'] = 'user timezone set successfully.'
    return HttpResponse(json.dumps(response_data), mimetype='application/javascript')

上下文

if "set_user_timezone" in request.session:
    user_session_ok = True
    user_time_zone = request.session['set_user_timezone']
else:
    user_session_ok = False
    user_time_zone = "Asia/Kolkata"

在我的基础模板中

{% if not user_session_ok %}
    <script type="text/javascript" src="{% static 'js/jstz.js' %}"></script>
    <script>
        $(document).ready(function(){
             var timezone = jstz.determine();
             var timezone_name = timezone.name();
             $.ajax({
                url : '/set-user-timezone/',
                action : "GET",
                data : {
                    timezone : timezone_name
                },
                success : function(data){

                },
                error : function(data){

                }
             })
        });
    </script>
{% endif %}

我的销售模板

{% for sale in sales %}
    {% load tz %}                       
    date : {{ sale.sale_date|timezone:user_time_zone }}         
{% endfor %}

我不知道这是正确的方法。但这个解决方案对我有用。

【讨论】:

    猜你喜欢
    • 2013-11-10
    • 2012-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 2012-09-30
    相关资源
    最近更新 更多