首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使登录表单在Django上的整个站点上可用

问如何使登录表单在Django上的整个站点上可用
EN

Stack Overflow用户
提问于 2012-02-22 04:48:21
回答 3查看 2.5K关注 0票数 3

我使用Django注册来管理注册和登录/注销,以及Django的身份验证系统。它工作得很好,我有一个基本的模板,在那里我已经把一个' login‘链接,将用户带到另一个页面登录。我想用实际的登录表单(用户名/密码)替换这个链接,这样表单就会直接出现在每个页面中。有什么建议吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-22 05:11:46

您可以使用inclusion template tag构建一个自定义标记,如下所示:

代码语言:javascript
复制
{% login_form %}

您可能希望将此标记传递给request.get_absolute_uri,以便它可以在登录视图的?next={{ request.get_absolute_uri }}参数中使用它,这样用户就可以在登录后被重定向到当前页面。

这样,您可以将登录表单放在任何模板中的任何位置,而不会违反DRY原则。您甚至可以使用如下内容将其嵌入到您的基本模板中:

代码语言:javascript
复制
{% if not user.is_authenticated %}
  {% login_form %}
{% else %}
  {# display welcome message. #}
{% endif %}
票数 5
EN

Stack Overflow用户

发布于 2012-02-22 05:00:17

有几种不同的方法可以做到这一点:

  1. 修改您的基本模板并对表单进行硬编码(它只是几个字段-不要忘记CSRF标记)。
  2. 使用上下文处理器使每个模板都可以使用Django表单变量。
  3. 创建自定义模板标记以显示表单并在基本模板上使用它。

您可能希望将逻辑包装在模板中,如下所示:

代码语言:javascript
复制
{% 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变量将在您的所有模板上可用。

票数 2
EN

Stack Overflow用户

发布于 2012-02-22 04:55:49

我已经将我的登录表单嵌入到基本模板中,并将request.user传递给我的站点的模板,以便仅当用户尚未登录时才显示登录表单。

所以在我的视图dict中,我包含了'user': request.user,我的模板看起来像这样:

代码语言:javascript
复制
{% 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 %}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9384922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档