0

当我运行项目的默认测试时,一项测试失败:

失败:test_current_site_in_context_after_login (django.contrib.auth.tests.views.LoginTest)

回溯(最近一次通话最后一次):文件“/Users/me/Dropbox/dotfiles/.virtualenvs/mysite/lib/python2.7/site-packages/django/contrib/auth/tests/views.py”,第 294 行,在 test_current_site_in_context_after_login self.assertEqual(response.context['site_name'], site.name) AssertionError: 'MySite' != u'example.com'

我的 settings.py 文件包含:

SITE_NAME = 'MySite'

我在设置文件末尾的上下文中加载 SITE_NAME:

TEMPLATE_CONTEXT_PROCESSORS = GLOBAL_SETTINGS.TEMPLATE_CONTEXT_PROCESSORS + (
    'utils.context_processors.mysite',
)

utils/context_processors.py 包含:

from mysite import settings
def mysite(request):
    return {
        'site_name': settings.SITE_NAME,
        'request': request
    }

我查看了源代码,但我不明白为什么测试将我的网站名称与“example.com”进行比较。我还查看了 django.contrib.sites.models.Site 类,想知道是否需要清除 Site 对象缓存。但是,我没有缓存设置。.pyc 文件中是否存在冲突,以至于我需要删除 virtualenv 中的所有 pyc 文件?

顺便说一句,我正在运行 Django 1.4.2 和 2.7.1。

非常感谢。

4

2 回答 2

3

我最近遇到了这个问题,我通过将以下内容添加到我的 settings.py 文件来修复它:

SITE_ID = 1

来自Django Settings Docs的 Django 文档:

SITE_ID

默认值:未定义

django_site 数据库表中当前站点的 ID,整数形式。这用于使应用程序数据可以连接到特定站点,并且单个数据库可以管理多个站点的内容。

于 2014-08-25T12:09:31.463 回答
0

问题是您在设置中对 SITE_NAME 进行了硬编码。您应该Site.objects.get_current()在中间件/视图中使用:https ://docs.djangoproject.com/en/1.4/ref/contrib/sites/#hooking-into-the-current-site-from-views

于 2012-11-26T23:57:07.123 回答