我正在使用Django注册来管理注册和登录/注销以及Django的auth系统。它工作正常,我有一个基本模板,我在其中放置了一个“登录”链接,将用户带到另一个页面进行登录。我想用实际的登录表单(用户名/密码)替换此链接,以便表单直接显示在每个页面中。有什么建议吗?
答案 0 :(得分:5)
您可以使用inclusion template tag构建如下所示的自定义标记:
{% login_form %}
您可能希望将此标记传递给request.get_absolute_uri
,以便它可以在?next={{ request.get_absolute_uri }}
参数中将其用于登录视图,以便用户在登录后可以重定向到当前页面。 p>
这样,您可以将登录表单放在任何模板中,而不违反DRY原则。您甚至可以使用以下内容将其嵌入基本模板中:
{% if not user.is_authenticated %}
{% login_form %}
{% else %}
{# display welcome message. #}
{% endif %}
答案 1 :(得分:2)
您可以采用以下几种方式:
您可能希望将逻辑包装在模板中,如下所示:
{% if user.is_authenticated %}
<!-- maybe show a logout link -->
{% else %}
<!-- display your form using one of the methods above -->
{% endif %}
注意:如果您使用的是auth template context processor,则所有模板上都会显示用户变量。
答案 2 :(得分:1)
我已将我的登录表单嵌入到基本模板中,并将request.user
传递给我的网站模板,以便仅在用户尚未登录时才显示登录表单。
所以在我看来,dict包括'user': request.user
,我的模板看起来与此类似:
{% if not user.is_authenticated %}
<form><fieldset><!-- Your login form here --></fieldset></form>
{% else %}
<!-- If you want to display something else if the user is logged in, like -->
<p>Welcome, {{ user }}!</p>
{% endif %}