Django:html模板的操作错误和“没有这样的表”
Posted
技术标签:
【中文标题】Django:html模板的操作错误和“没有这样的表”【英文标题】:Django: Operational Error with html template and "no such table" 【发布时间】:2018-01-12 23:10:34 【问题描述】:我正在学习 Obeythetestinggoat.com(Win7、Django 1.11、Python 3.6.1)的教程,但在尝试手动访问本地站点时遇到了一些问题。当我在 Chrome 浏览器窗口中运行 python manage.py runserver
并打开 localhost:8000
时,出现以下错误:
django.db.utils.OperationalError: no such table: accounts_user
浏览器窗口中的输出显示有Error during template rendering
这是它试图渲染的模板的 sn-p:
<div class="container">
<nav class="navbar navbar-default" role="navigation">
<div class="container-fluid">
<a class="navbar-brand" href="/">Superlists</a>
% if user.email %
<ul class="nav navbar-nav navbar-right">
<li class="navbar-text">Logged in as user.email </li>
<li><a href="#">Log out</a></li>
</ul>
% else %
<form class="navbar-form navbar-right"
method="POST"
action="% url 'send_login_email' %">
<span>Enter email to log in:</span>
<input class="form-control" name="email" type="text"/>
% csrf_token %
</form>
% endif %
</div>
</nav>
% if messages %
<div class="row">
<div class="col-md-8">
% for message in messages %
% if message.level_tag == 'success' %
<div class="alert alert-success"> message </div>
% else %
<div class="alert alert-warning"> message </div>
% endif %
% endfor %
</div>
</div>
% endif %
</div>
我相信问题来自% user.email %
,因为这些特定错误直到我将它们添加到模板中才出现。虽然,这似乎有些奇怪:
我的所有功能测试都顺利通过。
% messages %
没有任何问题。抱歉我没有
知道这些% things %
被调用了。
makemigrations
和 migrate
没有帮助。
这是accounts
应用程序的views.py
:
from django.shortcuts import redirect
from django.contrib import auth, messages
from django.core.mail import send_mail
from django.core.urlresolvers import reverse
from accounts.models import Token
def send_login_email(request):
email = request.POST['email']
token = Token.objects.create(email=email)
url = request.build_absolute_uri(
reverse('login') + '?token=' + str(token.uid)
)
message_body = f'Use this link to log in:\n\nurl'
send_mail(
'your login link for Superlists',
message_body,
'noreply@superlists',
[email]
)
messages.success(
request,
"Check your email, we've sent you a link you can use to log in.")
return redirect('/')
def login(request):
user = auth.authenticate(uid=request.GET.get('token'))
if user:
auth.login(request, user)
return redirect('/')
这是accounts
应用程序的models.py
:
from django.contrib import auth
from django.db import models
import uuid
auth.signals.user_logged_in.disconnect(auth.models.update_last_login)
class User(models.Model):
email = models.EmailField(primary_key=True)
REQUIRED_FIELDS = []
USERNAME_FIELD = 'email'
is_anonymous = False
is_authenticated = True
class Token(models.Model):
email = models.EmailField()
uid = models.CharField(default=uuid.uuid4, max_length=40)
【问题讨论】:
【参考方案1】:您是否通过 python 控制台运行过 makemigration 和 migrate 命令?我想您的模型更改尚未填充到您的数据库中。
$ python manage.py makemigrations your_app_label
然后运行
$ python manage.py migrate
您可以在这里阅读更多内容https://docs.djangoproject.com/en/1.11/topics/migrations/
【讨论】:
是的,我都试过了,它说no changes detected in 'accounts'
,还有no migrations to apply
【参考方案2】:
我在同一本书的同一部分遇到了同样的问题。虽然错误在登录前在 Chrome 中弹出,但它会在登录后在每个浏览器中弹出。这是一个数据库问题,只有在您手动运行服务器时才会弹出。
要修复,请使用:
python manage.py makemigrations
python manage.py migrate
如果您对 migrate
有任何错误,请擦除您的测试数据库并再次运行迁移:
rm db.sqlite3
python manage.py migrate --noinput
【讨论】:
以上是关于Django:html模板的操作错误和“没有这样的表”的主要内容,如果未能解决你的问题,请参考以下文章