4

クライアントアカウントの作成とログインに、django認証とともにdjango-registrationを使用しています。

私たちのサイトは、モバイル ユーザーとデスクトップ ユーザーによって使用されます。ユーザー エージェント文字列に応じてビューからさまざまなテンプレートを読み込むことで、モバイル ユーザーのアイデアに取り組み始めたところです。それはきれいに行われましたが、簡単にアクセスできないビューで何をすべきか(私たちが自分で書いたのではない)で立ち往生しているため、それが正しい方法であるかどうかはわかりません。

これにより、当面の問題が発生します。django-registration/authが送信するログインURL(デスクトップバージョン)からモバイルユーザーをリダイレクトする方法がわかりません。

戦術を変更して、テンプレート ファイル自体のさまざまなブラウザーに取り組むことができました。あっという間にぐちゃぐちゃになりそうな感じです。私はその考えがまったく好きではありません!

または、ユーザー エージェント文字列に基づいてさまざまなテンプレートを使用してリクエストをレンダリングするという現在の方法にとどまります。次に、django-registration をどのように処理する必要があるか (ユーザー エージェント文字列に基づいて別のテンプレート セットをロードする方法) を知る必要があります。モジュールの更新を簡単にするためだけに、django-registration コードを変更したくありません。

4

2 に答える 2

2

1つの方法は、django-registrationビューを呼び出してハードワークを実行する独自のログインビューを作成するだけですが、コンテキストに応じて異なるテンプレートを渡します。

def login(request, *args, **kwargs):
    my_kwargs = kwargs.copy()
    if <mobile condition>:
        my_kwargs['template_name'] = 'my_app/some_template.html'
    else:
        my_kwargs['template_name'] = 'my_app/some_other_template.html'

    from django.contrib import auth
    return auth.login(request, *args, **my_kwargs)
于 2011-08-07T21:30:53.217 に答える
2

django 登録テンプレートは非常にシンプルで、ほとんど使用されません。私は単純にこれらを特別なケースとして扱い、両方のプラットフォームで適切に機能する base.html を考え出しました。

私の登録ページは非常にシンプルに見えます。多くのサイトがこれを行っており、予想外ではありません。

もう 1 つのオプションは、モバイル デバイスであるかどうかの検出に基づいてテンプレート ディレクトリを設定するミドルウェアです。Python ビューでこのDetect mobile browser (not just iPhone) のようにモバイル ブラウザーを検出し、make_tls_property トリックを使用して TEMPLATE_DIRS を次のように更新するミドルウェアを使用できます。

TEMPLATE_DIRS = settings.__dict__['_wrapped'].__class__.TEMPLATE_DIRS = make_tls_property(settings.TEMPLATE_DIRS)

class MobileMiddleware(object):
    """Sets settings.SITE_ID based on request's domain"""
    def process_request(self, request):
        if *mobile*:
            TEMPLATE_DIRS.value = *mobiletemplates* + settings.BASE_TEMPLATE_DIRS
        else:
            TEMPLATE_DIRS.value = *normaltemplates* + settings.BASE_TEMPLATE_DIRS

明確にするために、djangotoolbox の一部である make_tls_property は、TEMPLATE_DIRS 設定をグローバル変数ではなくスレッドごとの変数にするため、各要求応答ループは変数の独自の「バージョン」を取得します。

于 2011-08-07T19:04:51.637 に答える