2012-11-06 25 views
2

我想知道是否有一種方法來區分用戶,取決於他來自哪個頁面。在我的模板中,我想只在用戶來自特定視圖(我不想顯示爲其他用戶顯示的同一頁面,但添加彈出窗口告訴他一些內容)時才顯示某些內容。根據他來自哪個頁面區分用戶。 Django

有沒有辦法做到這一點?

謝謝您的幫助

回答

2

有幾種方法可以做到這一點:

  • 您可以在第一視圖中的cookie,並且在目標視圖檢查它的價值。如果用戶瀏覽其他頁面,請不要忘記清理cookie。缺點是用戶可以在瀏覽器中禁用Cookie。
  • 根據用戶轉到目標視圖(鏈接或表單)的方式,您可以使用GET或POST參數。
  • 使用sessions
+0

非常感謝。我使用會話,它運作完美。 –

3

如果可能的話,使用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 %} 
+0

非常感謝,我終於使用了會話。我想要做的更簡單。 –

0

我能想到的最直接的通用方法是創建一箇中間件類,它將用戶會話中的先前請求路徑保存起來,然後在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 
相關問題