Django:无效的区块标签 'form.username

4 投票
2 回答
3241 浏览
提问于 2025-04-16 14:02

我刚开始学习Django,正在尝试创建一个登录页面。

这是我部分的 urls.py 文件:

urlpatterns = patterns('',
    (r'^$', main_page),
    (r'^login/$', 'django.contrib.auth.views.login'),
)

这是我登录页面的模板(registration/login.html):

<html>
<head>
<title>User Login</title>
</head>

<body>
    <h1>User Login</h1>
    {% if form.errors %}
    <p>username and password don't match.</p>
    {% endif %}
    <form method="post" action=".">
        <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" name="login" />
    </form>
</body>
</html>

当我启动应用程序并访问 login.html 时,我收到了以下错误信息:

TemplateSyntaxError at /login/

无效的块标签:'form.username'

我不明白哪里出错了。根据我的理解,登录视图 应该加载这个模板并传递 form 对象。当打印时,form.username 属性应该生成用于用户名文本框的HTML代码。为什么没有发生这种情况呢?

2 个回答

1

问题解决了。

这里有个混淆,就是{% ... %}{{ ... }}的区别。

{{ 变量名 }}是用来显示变量的值。

{% 命令 %}是用来执行一些指令的。

应该用的是{{ form.username }}{{ form.password }}

而不是{% form.username %}{% form.password %}

7

form 是一个上下文变量,而不是一个模板标签。所以你可以通过 {{ form }}{{ form.username }} 来访问它!

撰写回答