ユーザーがどのページから来たかによってユーザーを区別する方法があるかどうか知りたいです。
私のテンプレートでは、ユーザーが特定のビューから来た場合にのみ何かを表示したいと思います (他のユーザーに表示するのと同じページを表示したくありませんが、彼に何かを伝えるポップアップを追加します)。
それを行う方法はありますか?
ご協力ありがとうございました
ユーザーがどのページから来たかによってユーザーを区別する方法があるかどうか知りたいです。
私のテンプレートでは、ユーザーが特定のビューから来た場合にのみ何かを表示したいと思います (他のユーザーに表示するのと同じページを表示したくありませんが、彼に何かを伝えるポップアップを追加します)。
それを行う方法はありますか?
ご協力ありがとうございました
可能であれば、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 %}
これを行うにはいくつかの方法があります。
私が考えることができる最も簡単な一般的な方法は、以前の要求パスをユーザー セッションに保存{{ 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