将应用程序添加到托管的Django项目

时间:2015-02-11 22:53:59

标签: python django dreamhost

我现在已经在网站上倾倒了一段时间,并且还没有找到适合我的解决方案。长时间听众,第一次来电。

我有一个现有的Django应用程序(基于Django文档示例站点,包括'民意调查')。我已将其移动并通过wsgi在Web服务器上运行并运行。

我已经创建了一个我自己内容的新本地项目。我这样做的方式类似于示例网站,其中的应用程序与项目的主要应用程序处于同一级别。

我现在正尝试将我创建的应用添加到示例网站。我试图反映民意调查应用程序的组织和管道,因为它连接到" mysite"。

我的文件结构如下:

  • passenger_wsgi.py
  • mysite的
    • mysite(主要应用)
      • __init__.py
      • settings.py
      • urls.py
      • wsgi.py
    • 民意调查(示例网站应用)
      • __init__.py
      • urls.py
      • views.py
      • models.py
    • 核心(我正在添加的应用)
      • __init__.py
      • urls.py
      • views.py
      • models.py
    • manage.py

设置的添加如下:

INSTALLED_APPS = {
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'polls',
    'core'
}

的mysite / urls.py:

from django.conf.urls import patterns, include, url
from django.contrib import admin
urlpatterns = patterns('',
    url(r'^$', 'polls.views.home', name='home2'),
    url(r'^polls/', include('polls.urls', namespace="polls")),
    url(r'^admin/', include(admin.site.urls)),
    url(r'^core/', include('core.urls', namespace="core")),
)

芯/ urls.py:

from django.conf.urls import patterns, include, url
from django.contrib import admin
#from core import views
urlpatterns = patterns('',
    url(r'^', 'core.views.home', name='home'),
)

当我加载" manage.py shell"时,我可以从核心导入所有网址,模型和视图。我甚至可以使用django.test.Client来获得"得到" " /型芯/"我得到了200条预期内容的回复。但是,当我尝试在浏览器中导航到站点(任何URL)时,我得到:" ImportError at No module named urls"

如果我删除了包含core.urls的调用,则其他网址会按预期工作。

如果对urls.py文件进行不同的调整,我尝试了一个数字,包括直接从顶部urls.py调用core.views,忽略了core.urls,导致"没有模块名为views&# 34。

任何建议都将不胜感激。我也欢迎有关如何撰写更好问题的建议。

Stack Trace

编辑:还想提一下,我尝试删除所有已编译的python文件,以消除未更新逻辑的可能性。

编辑2 :它在virtualenv中运行。我在Dreamhost服务器上安装了较新版本的Python。

passenger_wsgi.py:

import sys, os
cwd = os.getcwd()
sys.path.append(cwd)
sys.path.append(cwd + '/mysite')

if sys.version < "2.7.9":
       os.execl(cwd + "/env/bin/python", "python2.7", *sys.argv)

sys.path.insert(0, cwd + '/env/bin')
sys.path.insert(0, cwd + '/env/lib/python2.7')
sys.path.insert(0, cwd + '/env/lib/python2.7/site-packages/django')
sys.path.insert(0, cwd + '/env/lib/python2.7/site-packages')

os.environ['DJANGO_SETTINGS_MODULE'] = "mysite.settings"
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

mysite的/ mysite的/ wsgi.py:

import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

编辑3 :这是核心/ views.py

from django.shortcuts import render
from django.core.mail import send_mail
from django.http import HttpResponseRedirect

# Create your views here.
def home(request):
    return render(request, 'core/home.html')

编辑4 :从浏览器中获取GET标头示例。结果500导入错误;没有名为urls的模块

GET /core/ HTTP/1.1
Host: #redacted
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8
Cookie: csrftoken=36HpckIqzOMbw29BOrQWcnaIJbMn6pwo; sessionid=z9c58vb6610kevo4yytolcbhlaqsoqnm

编辑5 :由于回复主要表明看起来正确,我已扩大问题的范围以包含Dreamhost并提交支持请求跟他们。如果有任何有用的话,我会在这里报告。

3 个答案:

答案 0 :(得分:0)

urlpatterns在core / urls.py中显示错误 而不是做

urlpatterns = patterns('',
url(r'^', views.home, name='home'),)

   urlpatterns = [url(r'^','core.views.home',name='home'),]

P.S。引用了views.name

答案 1 :(得分:0)

只是预感,但请尝试在mysite / urls.py中使用url(r'^core/', include('core.urls', namespace="core"))替换(r'^core/', include('core.urls'))

答案 2 :(得分:0)

我终于找到了解决方案。

我尝试创建一个全新的项目,然后添加&#39;核心&#39;应用程序,但看到完全相同的问题。我突然意识到,它无法访问子模块(视图,模型,网址)的原因是“核心”和“核心”。乘客装载的模块不是“核心”。我创建的模块。

我尝试更改应用名称,问题已解决。

我注意到在尝试创建名为&#39; test&#39;的应用时Django会向您发出一条消息,指出由于现有模块而无法允许它。显然,这并不是全面的情况。

要跟进,我查看了我的passenger_wsgi.py文件(也在问题中):

import sys, os
cwd = os.getcwd()
sys.path.append(cwd)
sys.path.append(cwd + '/mysite')

if sys.version < "2.7.9":
   os.execl(cwd + "/env/bin/python", "python2.7", *sys.argv)

sys.path.insert(0, cwd + '/env/bin')
sys.path.insert(0, cwd + '/env/lib/python2.7')
sys.path.insert(0, cwd + '/env/lib/python2.7/site-packages/django')
sys.path.insert(0, cwd + '/env/lib/python2.7/site-packages')

os.environ['DJANGO_SETTINGS_MODULE'] = "mysite.settings"
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

回头看后,我看到了错误。在遵循DreamHost的python替代版本(找到here)的设置指南中,我已经将我的env的python路径插入到sys.path的开头。这会导致django.core模块在​​我的项目应用程序之前匹配,该应用程序已附加到sys.path的末尾。

故事的道德是了解模块名称和路径构造。