2

ユーザーがどのページから来たかによってユーザーを区別する方法があるかどうか知りたいです。

私のテンプレートでは、ユーザーが特定のビューから来た場合にのみ何かを表示したいと思います (他のユーザーに表示するのと同じページを表示したくありませんが、彼に何かを伝えるポップアップを追加します)。

それを行う方法はありますか?

ご協力ありがとうございました

4

3 に答える 3

3

可能であれば、HTTP_REFERER リクエスト ヘッダーを使用します。これはほとんどの場合に機能します。そうでない場合は、セッションで維持する必要があります。

URL 呼び出しでどのビュー関数が呼び出されるかを知るには、 を使用しますdjango.core.urlresolvers.resolve。これは文書化されていないと思いますが、かなり簡単です。例:

In [1]: from django.core import urlresolvers

In [2]: urlresolvers.resolve('/admin/')
Out[2]: ResolverMatch(func=<function index at 0xadb1924>, args=(), kwargs={}, url_name='index', app_name='admin', namespace='admin')

In [3]: urlresolvers.resolve('/admin/').func
Out[3]: <function django.contrib.admin.sites.index>

これをカスタム テンプレート フィルタで HTTP_REFERER に対して使用すると、次のようになります。

from django import template
from django.core import urlresolvers

from yourapp.views import specific_view

register = template.Library()


@register.filter
def comes_from_specific_view(request):
    if not request.META.get('HTTP_REFERER', None):
        return False

    return urlresolvers.resolve(request.META['HTTP_REFERER']).func == specific_view

テンプレート内:

{% if request|comes_from_specific_view %}show popup{% endif %}
于 2012-11-06T15:36:20.670 に答える
2

これを行うにはいくつかの方法があります。

  • 最初のビューで Cookie を設定し、宛先ビューでその値を確認できます。ユーザーが途中で別のページに移動した場合は、Cookie を消去することを忘れないでください。欠点は、ユーザーがブラウザで Cookie を無効にできることです。
  • ユーザーが目的のビュー (リンクまたはフォーム) に移動する方法に応じて、GET または POST パラメーターを使用できます。
  • セッションを使用する
于 2012-11-06T15:33:53.010 に答える
0

私が考えることができる最も簡単な一般的な方法は、以前の要求パスをユーザー セッションに保存{{ user.session.previous_page }}し、テンプレートで使用するミドルウェア クラスを作成することです。例えば:

class ReferrerMiddleware(object):
    def process_request(self, request):
       if request.user.is_authenticated():
           request.user.session['previous_page'] = request.session['current_page']
           request.user.session['current_page'] = request.path
于 2012-11-06T15:37:26.490 に答える