0

我目前正在做一个 Django 项目以更熟悉 Django。目前我正在尝试制作两个模板,一个是带有登录页面链接的主页,它将登录用户然后返回模板并显示其他内容(将通过 nginx 处理)和另一个模板只能在登录时访问。出于某种原因,但似乎不起作用,或者说登录不起作用。

这是views.py 文件:

from django.shortcuts import render_to_response, get_object_or_404, HttpResponse
from django.contrib.auth import *
from django.contrib.auth.decorators import login_required

def index(request):
        return render_to_response('index.html')

@login_required
def main(request):
    return render_to_response('loginrequired.html')

这是主要模板:

{% load static %}
{% get_static_prefix as STATIC_PREFIX %}

<html>
<head>
<title>Django NGINX Test</title>
</head>
<body>
<h1>Django NGINX Test</h1>
<img src="{{STATIC_PREFIX}}beach.jpg"/>
<BR><BR>
<h2>
{% if user.is_authenticated %}
  <a href="test">Log out</a> {{user.username}}
{% else %}
  <a href="login">Log in</a>
{% endif %}
</h2>
</body>
</html>

这是 login_required 模板:

{% load static %}
{% get_static_prefix as STATIC_PREFIX %}

<html>
<head>
<title>Django NGINX Test</title>
</head>
<body>
<h1>Django NGINX Test</h1>
<img src="{{STATIC_PREFIX}}beach.jpg"/>
<BR><BR>
Welcome {{user.username}}. You're now logged in as required.<BR><BR>
<h2>
{% if user.is_authenticated %}
  <a href="test">Log out</a> {{user.username}}
{% else %}
  <a href="login">Log in</a>
{% endif %}
</h2>
</body>
</html>

最后,但并非最不重要的是我的登录模板:

<html>
<head>
    <title>User Login</title>
</head>
<h1>User Login</h1>
{% if form.errors %}
    <p>Your username and password didn't match.
        Please try again.</p>
{% endif %}
<form method="post" action="." >
{% csrf_token %}
    <p><label for="id_username">Username:</label>
        {{ form.username }}</p>
    <p><label for="id_password">Password:</label>
        {{ form.password }}</p>
    <input type="hidden" name="next" value="/" />
    <input type="submit" value="login" />
</form>
</body>
</html>

我将不胜感激任何帮助。我已经为此研究过Django Tutorial,但我没有得到它。

4

2 回答 2

5

您需要确保在您的 中包含以下中间件settings.py

  • 会话中间件
  • 身份验证中间件

要确保名为的上下文变量user可用于您的模板,您需要确保django.contrib.auth.context_processors.auth上下文处理器位于您的settings.py.

更多信息可以在Djano auth 主题中找到。

于 2012-05-24T16:52:46.733 回答
1

用户已登录,但您没有将其传递给模板,因此它不会显示用户详细信息。确保使用 RequestContext 呈现模板,或使用新的render快捷方式而不是render_to_response.

于 2012-05-24T16:57:03.687 回答