我目前正在尝试覆盖Django 1.4中使用的默认窗体登录到管理网站(我的网站使用一个额外的'令牌'字段用户需要选择双因素身份验证,对于网站工作人员是强制性的)。 Django的默认表单不支持我所需要的。目前,我在我的templates/
目录中有一个名为templates/admin/login.html
的文件,该文件似乎正确覆盖了我在整个网站中使用的模板。该文件的内容如下简单:Django - 覆盖管理网站的登录表格
# admin/login.html:
{% extends "login.html" %}
实际登录表单是如下:
# login.html:
{% load url from future %}<!DOCTYPE html>
<html>
<head>
<title>Please log in</title>
</head>
<body>
<div id="loginform">
<form method="post" action="{% url 'id.views.auth' %}">
{% csrf_token %}
<input type="hidden" name="next" value="{{ next }}" />
{{ form.username.label_tag }}<br/>
{{ form.username }}<br/>
{{ form.password.label_tag }}<br/>
{{ form.password }}<br/>
{{ form.token.label_tag }}<br/>
{{ form.token }}<br/>
<input type="submit" value="Log In" />
</form>
</div>
</body>
</html>
我的问题是,形式使用我的正常登录的网址,因为提供的工作完全正常访问时我提供我自己的AuthenticationForm
作为要显示的表单,但通过Django Admin登录路由,Django喜欢将自己的表单提供给此模板,因此只有username
和password
字段呈现。有什么办法可以让这项工作成功吗?或者说,我只是将HTML字段'硬编码'为表单中的内容而已?
这个几乎奏效:我现在唯一的问题是重写此类会导致.autodiscover()方法停止工作。删除此操作会从管理网站中删除我的所有模型。我不确定如何从另一个应用程序的admin.py模块明确导入管理模型,这是可能的(或者更好,我们可以为我的新子类AdminSite启用autodiscover()吗?) – 2012-07-15 07:48:49