我使用Django注册来管理注册和登录/注销,以及Django的身份验证系统。它工作得很好,我有一个基本的模板,在那里我已经把一个' login‘链接,将用户带到另一个页面登录。我想用实际的登录表单(用户名/密码)替换这个链接,这样表单就会直接出现在每个页面中。有什么建议吗?
发布于 2012-02-22 05:11:46
您可以使用inclusion template tag构建一个自定义标记,如下所示:
{% login_form %}您可能希望将此标记传递给request.get_absolute_uri,以便它可以在登录视图的?next={{ request.get_absolute_uri }}参数中使用它,这样用户就可以在登录后被重定向到当前页面。
这样,您可以将登录表单放在任何模板中的任何位置,而不会违反DRY原则。您甚至可以使用如下内容将其嵌入到您的基本模板中:
{% if not user.is_authenticated %}
{% login_form %}
{% else %}
{# display welcome message. #}
{% endif %}发布于 2012-02-22 05:00:17
有几种不同的方法可以做到这一点:
您可能希望将逻辑包装在模板中,如下所示:
{% if user.is_authenticated %}
<!-- maybe show a logout link -->
{% else %}
<!-- display your form using one of the methods above -->
{% endif %}注意:如果您使用的是auth template context processor,则user变量将在您的所有模板上可用。
发布于 2012-02-22 04:55:49
我已经将我的登录表单嵌入到基本模板中,并将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 %}https://stackoverflow.com/questions/9384922
复制相似问题