【问题标题】:Site matching query does not exist网站匹配查询不存在
【发布时间】:2012-08-02 14:01:49
【问题描述】:

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

在我点击我的应用程序上的“注销”之前,该网站运行良好。之后,网站会给我这个错误: 不存在于 /login/ 网站匹配查询不存在。

我到处搜索,我得到的唯一解决方案与设置站点框架、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.
    }
}

【问题讨论】:

  • 您可以登录管理站点吗?看来您的 django_site 表是空的。你至少需要一个条目在那里
  • 不,我无法登录管理站点。它在 /admin/ 给了我同样的错误

标签: python django


【解决方案1】:

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

【讨论】:

  • 你应该更详细地解释,包括为什么
【解决方案2】:

看来你必须添加 SITE_ID=1 在settings.py中

【讨论】:

    【解决方案3】:

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

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

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

    SITE_ID = 8
    

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

    【讨论】:

      【解决方案4】:

      我没有使用 python manage.py shell 修复它

      起初我尝试使用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)
      

      但它给出了一个完整性错误

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

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

      tables
      -django_site
      --Columns
      ---id
      

      id 为 1,名称为 example.com,域为 example.com

      【讨论】:

        【解决方案5】:

        在你的数据库django_site表中查询ID,并在你的Django settings.py中设置正确的ID,例如:SITE_ID = 3

        【讨论】:

          【解决方案6】:

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

          【讨论】:

          • 非常感谢兄弟
          【解决方案7】:

          如果您的数据库中没有定义站点并且 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)
          

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

          【讨论】:

          • 我无法让 python manage.py shell 工作。它给了我这个错误:python:无法打开文件'manage.py'
          • 我从设置中删除了第一个项目并从以前的所有者那里获得了应用程序(网站管理员每年都会为此更改。)
          • 这听起来比缺少一个数据库条目更大。如果您甚至无法运行 manage.py,那么您甚至无法启动开发服务器进行本地测试。您确定您在实际包含 manage.py 脚本的项目位置中运行它吗?
          • 我可能不在项目位置内运行。它当前在 C:\Users\MyName> 中运行。但此应用的 manage.py 文件位于 C:\Users\MyName\Documents\Websites\NHS 中。
          • 那么项目有额外的库依赖,你还没有安装在你的机器上。您将需要安装所有正在使用的第 3 方要求。但至少你可以运行 manage.py
          猜你喜欢
          • 2013-04-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-26
          • 2015-12-29
          • 2016-12-20
          • 2011-02-10
          • 1970-01-01
          相关资源
          最近更新 更多