使用django子域,它说localhost不属于域example.com

时间:2016-07-09 17:52:52

标签: python django subdomain django-subdomains

我使用的是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"),
]

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

3 个答案:

答案 0 :(得分:2)

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

  

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

这存储在DB中,因此无法在配置中完全设置它。

要在数据库中进行设置,请按照here

步骤操作
>>> 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 ...]加载它。否则,您可以通过站点应用程序下的管理界面进行设置。

List of Django Apps

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

The existing site

更改这些:

Change the two fields

这应解决问题。

答案 1 :(得分:1)

为什么要设置SITE_ID = 1

来自django.contrib.site的Django文档:

  

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

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

答案 2 :(得分:-1)

  

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

我已经设置了我的linode,子域名指向不同的应用和网站。我通过在“emperor”模式下配置NGINX webserver和uWSGI web app守护进程来完成此操作。

要在本地测试django-subdomain,adding subdomains to localhost上的这个问题可能有所帮助。