在django模板中获取用户信息

时间:2012-12-04 22:27:35

标签: django django-authentication django-registration

从django模板获取用户信息的最佳方法是什么?

例如,如果我只想:

  1. 如果用户已登录,请显示“欢迎[用户名]”
  2. 否则,显示登录按钮。
  3. 我正在使用django-registration / authentication

4 个答案:

答案 0 :(得分:61)

当前Django版本的另一种方法:

{% if user.is_authenticated %}
    <p>Welcome, {{ user.get_username }}. Thanks for logging in.</p>
{% else %}
    <p>Welcome, new user. Please log in.</p>
{% endif %}


注意:

  • 在视图中使用request.user.get_username()&amp;模板中的user.get_username。首选直接引用username属性。 Source
  • 如果使用RequestContext,则此模板上下文变量可用。
  • django.contrib.auth.context_processors.auth默认启用&amp;包含变量user
  • 您无需启用django.core.context_processors.request模板上下文处理器。

来源:https://docs.djangoproject.com/en/dev/topics/auth/default/#authentication-data-in-templates

答案 1 :(得分:37)

{% if request.user.is_authenticated %}Welcome '{{ request.user.username }}'
{% else %}<a href="{% url django.contrib.auth.login %}">Login</a>{% endif %}

并确保您在request中安装了settings.py模板上下文处理器:

TEMPLATE_CONTEXT_PROCESSORS = (
    ...
    'django.core.context_processors.request',
    ...
)

答案 2 :(得分:6)

根据问题标题,以下内容可能对某人有用。在我的模板中使用了以下内容:

用户名const navigationOptions = ({ navigation }) => ({ headerLeft: <Icon name={'arrow-left'} //<== Vector Icon Here onPress={ () => { navigation.goBack() }} /> const RootStack = StackNavigator( RouteConfigs, //... StackNavigatorConfigs, navigationOptions )

用户全名{{ user.username }}

用户组{{ user.get_full_name }}

电子邮件{{ user.groups.all.0 }}

会议开始于{{ user.email }}

谢谢:)

答案 3 :(得分:0)

首先,首先,如果您的字段更改了名称,则必须以这种方式覆盖函数(get_full_name(),get_short_name()等):

def get_full_name(self):
    return self.names + ' ' + self.lastnames

def get_short_name(self):
    return self.names

在模板中,您可以这样显示

{% if user.is_authenticated %}
<strong>{{ user.get_short_name }}</strong>
{% endif %}

这些是身份验证https://docs.djangoproject.com/es/2.1/topics/auth/customizing/

中的方法