15

クライアントからユーザーのタイムゾーンを自動的に取得する方法があるかどうか知りたいのですが。特にログイン中。

ログインページにこれを追加しようとしました(を使用auth.login):

{% get_current_timezone as TIME_ZONE %}

次に、これをログインフォームに追加します

<input type="hidden" name="next" value="/redirect/?tz={{ TIME_ZONE }}">

ただし、これtzは常にサーバーのタイムゾーンです。

4

5 に答える 5

14

私はそれをさらに単純化し、ここでプラグインできます: https://github.com/Miserlou/django-easy-timezones または http://gun.io/blog/django-easy-timezones/

于 2013-07-17T09:21:04.223 に答える
13

ドキュメントから:

現在のタイムゾーンの選択

現在のタイム ゾーンは、翻訳の現在のロケールに相当します。ただし、Django がユーザーのタイムゾーンを自動的に決定するために使用できる Accept-Language HTTP ヘッダーに相当するものはありません。代わりに、Django はタイム ゾーン選択関数を提供します。それらを使用して、自分にとって意味のあるタイム ゾーン選択ロジックを構築します。

getTimezoneOffset関数を利用して JavaScript を介してタイムゾーン Cookie を設定するか、geoip マジックを実行して場所ごとにタイムゾーンを設定してみてください。おそらく最も信頼できる方法は、ユーザーに直接尋ねて、この情報をユーザー プロファイル/セッションに保存することです。

于 2012-04-19T20:13:44.703 に答える
2

django がタイムゾーンhttps://pypi.python.org/pypi/django-visitor-information-middleware/0.1.0を有効にするための素敵な APP があります。2つのミドルウェアを持つもの

タイムゾーンミドルウェア

ミドルウェアは、認証されたユーザーのタイムゾーンを有効にします。

訪問者情報ミドルウェア

このミドルウェアは、次のキーを request.visitor ディクショナリに追加します。

country - 訪問者の居住国。

city - 訪問者の拠点となる都市

location.timezone - 訪問者が拠点としている場所で使用されるタイムゾーン

location.unit_system - 訪問者が拠点としている場所で使用される単位系

user.timezone - 現在認証されているユーザーのタイムゾーン

user.unit_system - 現在認証されているユーザーの単位系。

cookie_notice - 現在の訪問者に対して Cookie 同意通知を表示する必要がある場合は True。

Note: Location of the user is determined based on the user's IP address.
于 2014-04-08T13:12:31.217 に答える
1

現在、MaxMind geoip データベース ( http://dev.maxmind.com/geoip/legacy/geolite ) と GeoDjango ( https://docs.djangoproject.com/en )に依存するミドルウェア クラス (Django のドキュメントに従って) を作成しました。 /1.5/ref/contrib/gis/ ) を使用してユーザーの国コードを取得し、pytz を使用してタイムゾーンを動的に設定します。

class TimezoneMiddleware(object):


    def __getUserTimeZone(self, request):
        info = IPResolver(request).getGeoInfo()
        return pytz.country_timezones[info['country_code']][0]


    def process_request(self, request):
        try:
            tz = self.__getUserTimeZone(request)
            timezone.activate(tz)
            logger.debug('Time zone "%s" activated' % str(tz))
        except Exception as e:
            logger.error('Unable to set timezone: %s' % str(e))

pytz.country_timezones特定の国で利用可能なタイム ゾーンのコレクションを返すので、基本的に最初に返されたタイム ゾーンを選択します。

IPResolver私が上に書いた個人的なユーティリティクラスですdjango.contrib.gis.utils.GeoIP

于 2013-06-20T09:14:02.810 に答える