2013-06-26 106 views
12

我對request.user在Django中引用了什麼感到困惑? 它是指用戶名字段在auth_user表還是它指用戶模型實例?request.user in Django

我有這個疑問,因爲我沒能用來訪問電子郵件字段在模板{{request.user.username}}或{{user.username}}

所以不是我沒有在意見文件以下

userr = User.objects.get(username=request.user) 

並通過「userr」的模板和訪問電子郵件字段{{ userr.email }}

雖然它的工作,但我想有一些清晰了。

謝謝:)

回答

7

如果您的模板正在接收AnonymousUser,將不會找到對{{request.user.email}}的引用。以前,您必須詢問{{request.user.is_authenticated }}

您必須檢查是否包含django.core.context_processors.auth上下文處理器中的TEMPLATE_CONTEXT_PROCESSORS設置部分。如果您使用的是Django 1.4或更新版本,則上下文處理器爲django.contrib.auth.context_processors.auth。這個上下文處理器負責在每個請求中包含用戶對象。

+1

request.user默認傳遞給模板還是顯式完成?而且在某些地方,我已經看到{{user.is_authenticated}}的使用。這是否也工作? – zephyr

+0

謝謝@Emigue。你的意思是說,django.core.context_processors.auth適用於版本低於1.4? {{user.is_authenticated}}也可以工作嗎? – zephyr

0

request.user是指實際的用戶模型實例。

request.user.FIELDNAME將允許您訪問用戶模型

+0

但是請求必須通過。是嗎 ?? – zephyr

+0

請求被傳遞給這樣的Django模板。 'render(request,'templatename',{'a':'b'....})' 第三個參數是上下文字典 –

8

request.user的所有領域,是用戶模型對象。

如果您未明確傳遞request,則無法訪問模板中的請求對象。 如果您希望從模板訪問用戶對象,則應將其傳遞給模板或使用RequestContext。

+0

如何獲取當前用戶?我的觀點是以正確的方式訪問它嗎? – zephyr

+1

如果用戶登錄,'request.user'是當前登錄的用戶。否則它是AnonymousUser。 – falsetru

+0

@SumeetDhariwal,https://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpRequest.user – falsetru

1

這取決於你設定的。

所以,最好是使用

user = User.objects.get(username=request.user.username) 

其實,你並不需要定義這樣的變量,如果你追加'django.core.context_processors.request'TEMPLATE_CONTEXT_PROCESSORS列表settings.py

然後你就可以訪問變量{ {request.user.username}}如果您使用的是renderviews.py

+0

謝謝@Suhail糾正我的問題。我認爲我的代碼可能工作,因爲用戶模型默認打印用戶名字段。就像我們在自定義類中定義__unicode__函數的方式一樣?是這樣嗎?? – zephyr

+0

是的,它取決於'def __unicode__' – suhailvs