The*_*hew 5 python django dreamhost
我已经在网站上倾倒了一段时间,并没有找到适合我的决议.长时间听众,第一次来电.
我有一个现有的Django应用程序(基于Django文档示例站点,包括'民意调查').我已将其移动并通过wsgi在Web服务器上运行并运行.
我已经创建了一个我自己内容的新本地项目.我这样做的方式类似于示例站点,其中的应用程序与项目的主应用程序处于同一级别.
我现在正在尝试将我创建的应用程序添加到示例站点.我试图反映民意调查应用程序的组织和管道,因为它连接到"mysite".
我的文件结构如下:
__init__.py__init__.py__init__.py设置的添加如下:
INSTALLED_APPS = {
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'polls',
'core'
}
Run Code Online (Sandbox Code Playgroud)
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")),
)
Run Code Online (Sandbox Code Playgroud)
核心/ 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'),
)
Run Code Online (Sandbox Code Playgroud)
当我加载"manage.py shell"时,我可以从核心导入所有URL,模型和视图.我甚至可以使用django.test.Client来"获取""/ core /",并且我得到了200个具有预期内容的响应.但是,当我尝试在浏览器中导航到该站点(任何URL)时,我得到:"NoError命名为urls的ImportError"
如果我删除包含core.urls的调用,则其他URL按预期工作.
我已经尝试了一个数字,如果对urls.py文件进行不同的调整,包括直接从顶部urls.py调用core.views,忽略core.urls,这导致"没有模块命名视图".
任何建议将不胜感激.我也欢迎有关如何撰写更好问题的建议.
编辑:还想提一下,我尝试删除所有编译的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()
Run Code Online (Sandbox Code Playgroud)
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()
Run Code Online (Sandbox Code Playgroud)
编辑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')
Run Code Online (Sandbox Code Playgroud)
编辑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
Run Code Online (Sandbox Code Playgroud)
编辑5:由于响应主要表明事情看起来正确,我已经扩大了问题的范围,包括Dreamhost并提交了支持票.如果有任何有用的话,我会在这里报告.
我终于找到了解决办法。
我尝试创建一个全新的项目并添加“核心”应用程序,但看到了完全相同的问题。我突然意识到,它无法访问子模块(视图、模型、url)的原因是乘客加载的“核心”模块不是我创建的“核心”模块。
我尝试更改应用程序的名称,问题已解决。
我注意到,当尝试创建名为“test”的应用程序时,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()
Run Code Online (Sandbox Code Playgroud)
回头一看,我发现了错误。在遵循 DreamHost 的 python 替代版本设置指南(在此处找到)中,我将环境的 python 路径插入到sys.path. 这会导致django.core模块在我的项目应用程序之前匹配,该项目应用程序附加到sys.path.
这个故事的寓意是要注意模块名称和路径构造。