1

我正在使用 Django 包django-subdomain,但我认为我没有正确配置它。

现在我正在尝试从数据库加载数据,我在终端中收到此错误

主机 localhost:8000 不属于域 example.com,无法识别该请求的子域

我的项目中没有对 example.com 的任何引用。

这是我的子域配置:

ROOT_URLCONF = 'creativeflow.urls'
# A dictionary of urlconf module paths, keyed by their subdomain.
SUBDOMAIN_URLCONFS = {
    None: ROOT_URLCONF,  # no subdomain, e.g. ``example.com``
    'www': ROOT_URLCONF,
    'blog': ROOT_URLCONF + '.blogs',
}
SITE_ID = 1

中间件:

MIDDLEWARE_CLASSES = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'subdomains.middleware.SubdomainURLRoutingMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

我的网址:

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^posts/(?P<year>\d{4})/(?P<months>\d{2}|\w{3})/(?P<day>\d{2})',
       BlogListView.as_view(paginate_by=25), name="blog-list-view"),
]

我不确定我需要什么其他配置才能让我使用/开发子域。我需要更改什么才能访问 BlogListView http://localhost:8000/posts/2016/07/09?或者通过实际的子域更好blog.creativeflow.com/posts/2016/07/09?我怀疑后者只是对相当于/etc/hosts/.

4

3 回答 3

2

SITE = 1将对应于example.com设置的默认值django.contrib.site

django.contrib.sites 注册了一个 post_migrate 信号处理程序,该处理程序创建一个名为example.com的默认站点,其域为 example.com。这个站点也将在 Django 创建测试数据库之后创建。

这存储在数据库中,因此无法在 config.xml 中进行设置。

要在数据库中设置它,请按照此处的步骤操作:

>>> from django.contrib.sites.models import Site
>>> one = Site.objects.all()[0]
>>> one.domain = 'myveryspecialdomain.com'
>>> one.name = 'My Special Site Name'
>>> one.save()

然后你可以运行python manage.py dumpdata sites它来生成你刚刚加载的数据的 JSON。然后稍后使用django-admin loaddata fixture [fixture ...]. 否则,您可以通过站点应用程序下的管理界面进行设置。

Django 应用程序列表

这将在修复之前显示为 example.org:

现有网站

更改这些:

更改两个字段

那应该可以解决问题。

于 2016-07-09T22:33:01.643 回答
1

你为什么要设置SITE_ID = 1

来自 Django 文档django.contrib.site

django.contrib.sites 注册了一个 post_migrate 信号处理程序,该处理程序创建一个名为 example.com 的默认站点,其域为 example.com。这个站点也将在 Django 创建测试数据库之后创建。

您需要SITE_ID为当前站点指定正确的。

于 2016-07-09T18:11:49.417 回答
-1

我需要更改什么以便可以在 http://localhost:8000/posts/2016/07/09访问 BlogListView ?或者通过 blog.creativeflow.com 的实际子域更好

我已经使用指向不同应用程序和站点的子域设置了我的 linode。我通过在“皇帝”模式下配置 NGINX 网络服务器和 uWSGI 网络应用程序守护进程来做到这一点。

要在本地测试 django-subdomain,这个关于将子域添加到 localhost的问题可能会有所帮助。

于 2016-07-09T18:08:53.973 回答