我想知道是否有一種方法來區分用戶,取決於他來自哪個頁面。在我的模板中,我想只在用戶來自特定視圖(我不想顯示爲其他用戶顯示的同一頁面,但添加彈出窗口告訴他一些內容)時才顯示某些內容。根據他來自哪個頁面區分用戶。 Django
有沒有辦法做到這一點?
謝謝您的幫助
我想知道是否有一種方法來區分用戶,取決於他來自哪個頁面。在我的模板中,我想只在用戶來自特定視圖(我不想顯示爲其他用戶顯示的同一頁面,但添加彈出窗口告訴他一些內容)時才顯示某些內容。根據他來自哪個頁面區分用戶。 Django
有沒有辦法做到這一點?
謝謝您的幫助
有幾種方法可以做到這一點:
如果可能的話,使用HTTP_REFERER request header。這在大多數情況下工作。如果沒有,那麼你將不得不在會議中保持它。
要知道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>
現在,使用,對在custom template filter的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 %}
非常感謝,我終於使用了會話。我想要做的更簡單。 –
我能想到的最直接的通用方法是創建一箇中間件類,它將用戶會話中的先前請求路徑保存起來,然後在t中使用{{ 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
非常感謝。我使用會話,它運作完美。 –