站点匹配查询不存在

use*_*866 60 python django

Python noob,因为这是我的第一个项目,所以请原谅我不熟悉.

该网站运行良好,直到我点击我的应用程序"注销".之后,该网站会给我这个错误:/ login/site/Site匹配查询中的DoesNotExist不存在.

我到处搜索,我得到的唯一解决方案是设置站点框架,SITE_ID等.我认为我的计算机上的这些项目很好,但我找不到一个演练/指南来帮我查看它们.

谁能告诉我问题是什么以及如何解决?在此先感谢:3

DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
    'NAME': '/home/dotcloud/nhs.db',                      # Or path to database file if using sqlite3.
    'USER': '',                      # Not used with sqlite3.
    'PASSWORD': '',                  # Not used with sqlite3.
    'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
    'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
}
Run Code Online (Sandbox Code Playgroud)

}

jdi*_*jdi 146

如果您没有在数据库中定义站点并且django想要引用它,则需要创建一个站点.

来自python manage.py shell:

from django.contrib.sites.models import Site
new_site = Site.objects.create(domain='foo.com', name='foo.com')
print (new_site.id)
Run Code Online (Sandbox Code Playgroud)

现在将settings.py中的站点ID设置为SITE_ID


小智 29

django_site必须包含一个具有相同值的行id(默认等于1),SITE_ID设置为(在您的内部settings.py).


Ani*_*kur 7

我看到了创建新站点的答案以及为此的参考 ID。但是,如果您已经有一个站点,或者以某种方式从 UI 中删除并再次创建了该站点,则 id 会不断增加。为了解决这个问题,你可以按如下方式获取 id:

python manage.py shell
from django.contrib.sites.models import Site
print(Site.objects.get(name='example.com').id)
Run Code Online (Sandbox Code Playgroud)

获取您在此处获得的 id setting.py。例如。

SITE_ID = 8
Run Code Online (Sandbox Code Playgroud)

基本上,您的旅游网站对应的表中的 ID 和 settings.py 中的 ID 应该匹配。


小智 5

我没有使用 python manage.pyshell修复了它

起初我尝试使用manage.pyshell 使用上面的命令:

from django.contrib.sites.models import Site
new_site = Site.objects.create(domain='foo.com', name='foo.com')
print(new_site.id)
Run Code Online (Sandbox Code Playgroud)

但它给出了完整性错误

简短的答案是添加SITE_ID = 1到您的settings.py 如果您想知道您的站点 ID 是什么,然后进入实际的数据库,我下载了 sqliteman 来查看我的表有什么。因此,表中的任何站点 ID 都会被分配给SITE_ID

这是因为有一个函数get_current正在寻找SITE_ID,但在你的文件中没有找到它settings.py

tables
-django_site
--Columns
---id
Run Code Online (Sandbox Code Playgroud)

它的 id 应该为 1,名称为example.com,域名为example.com


小智 5

添加SITE_ID = 1到 django 项目中的 settings.py。