Python Django(PyDev)中my_app.views的基本、未解析导入
home/DjangoProjects/django_书签/env/django_书签中的我的项目树如下所示:Python Django(PyDev)中my_app.views的基本、未解析导入,python,django,eclipse,pydev,Python,Django,Eclipse,Pydev,home/DjangoProjects/django_书签/env/django_书签中的我的项目树如下所示: django_bookmarks/ #project django_bookmarks/ __init__.py settings.py urls.py wsgi.py bookmarks/ #made with python manage.py startapp bookmarks __i
django_bookmarks/ #project
django_bookmarks/
__init__.py
settings.py
urls.py
wsgi.py
bookmarks/ #made with python manage.py startapp bookmarks
__init__.py
models.py
test.py
views.py
manage.py
在../书签/视图中有:
from django.http import HTTPResponse
def main_page(request):
output = '''
<html>
<head><title>%s</title></head>
<body>
<h1>%s</h1><p>%s</p>
</body>
</html>
''' % (
'Django Bookmarks',
'Welcome to Django Bookmarks',
'Where you can store and share bookmarks!'
)
return HttpResponse(output)
编辑:
在../django_书签/设置中:
# Django settings for django_bookmarks project.
DEBUG = True
TEMPLATE_DEBUG = DEBUG
ADMINS = (
# ('Your Name', 'your_email@example.com'),
)
MANAGERS = ADMINS
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
'NAME': '/home/novak/DjangoProjects/django_bookmarks/env/django_bookmarks/django_bookmarks/sqlite.db', # Or path to database file if using sqlite3.
# The following settings are not used with sqlite3:
'USER': '',
'PASSWORD': '',
'HOST': '', # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP.
'PORT': '', # Set to empty string for default.
}
}
# Hosts/domain names that are valid for this site; required if DEBUG is False
# See https://docs.djangoproject.com/en/1.5/ref/settings/#allowed-hosts
ALLOWED_HOSTS = []
# Local time zone for this installation. Choices can be found here:
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
# although not all choices may be available on all operating systems.
# In a Windows environment this must be set to your system time zone.
TIME_ZONE = 'America/Chicago'
# Language code for this installation. All choices can be found here:
# http://www.i18nguy.com/unicode/language-identifiers.html
LANGUAGE_CODE = 'en-us'
SITE_ID = 1
# If you set this to False, Django will make some optimizations so as not
# to load the internationalization machinery.
USE_I18N = True
# If you set this to False, Django will not format dates, numbers and
# calendars according to the current locale.
USE_L10N = True
# If you set this to False, Django will not use timezone-aware datetimes.
USE_TZ = True
# Absolute filesystem path to the directory that will hold user-uploaded files.
# Example: "/var/www/example.com/media/"
MEDIA_ROOT = ''
# URL that handles the media served from MEDIA_ROOT. Make sure to use a
# trailing slash.
# Examples: "http://example.com/media/", "http://media.example.com/"
MEDIA_URL = ''
# Absolute path to the directory static files should be collected to.
# Don't put anything in this directory yourself; store your static files
# in apps' "static/" subdirectories and in STATICFILES_DIRS.
# Example: "/var/www/example.com/static/"
STATIC_ROOT = ''
# URL prefix for static files.
# Example: "http://example.com/static/", "http://static.example.com/"
STATIC_URL = '/static/'
# Additional locations of static files
STATICFILES_DIRS = (
# Put strings here, like "/home/html/static" or "C:/www/django/static".
# Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.
)
# List of finder classes that know how to find static files in
# various locations.
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
# 'django.contrib.staticfiles.finders.DefaultStorageFinder',
)
# Make this unique, and don't share it with anybody.
SECRET_KEY = '0i_*)b7)hc0oy^7qyit47w%k65pwfo7e@p)k=7lho3)q5!mx+!'
# List of callables that know how to import templates from various sources.
TEMPLATE_LOADERS = (
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
# 'django.template.loaders.eggs.Loader',
)
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
# Uncomment the next line for simple clickjacking protection:
# 'django.middleware.clickjacking.XFrameOptionsMiddleware',
)
ROOT_URLCONF = 'django_bookmarks.urls'
# Python dotted path to the WSGI application used by Django's runserver.
WSGI_APPLICATION = 'django_bookmarks.wsgi.application'
TEMPLATE_DIRS = (
# Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
# Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.
)
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
# Uncomment the next line to enable the admin:
# 'django.contrib.admin',
# Uncomment the next line to enable admin documentation:
# 'django.contrib.admindocs',
)
# A sample logging configuration. The only tangible logging
# performed by this configuration is to send an email to
# the site admins on every HTTP 500 error when DEBUG=False.
# See http://docs.djangoproject.com/en/dev/topics/logging for
# more details on how to customize your logging configuration.
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'filters': {
'require_debug_false': {
'()': 'django.utils.log.RequireDebugFalse'
}
},
'handlers': {
'mail_admins': {
'level': 'ERROR',
'filters': ['require_debug_false'],
'class': 'django.utils.log.AdminEmailHandler'
}
},
'loggers': {
'django.request': {
'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': True,
},
}
}
在../django_书签/wsgi中:
"""
WSGI config for django_bookmarks project.
This module contains the WSGI application used by Django's development server
and any production WSGI deployments. It should expose a module-level variable
named ``application``. Django's ``runserver`` and ``runfcgi`` commands discover
this application via the ``WSGI_APPLICATION`` setting.
Usually you will have the standard Django WSGI application here, but it also
might make sense to replace the whole Django WSGI application with a custom one
that later delegates to the Django one. For example, you could introduce WSGI
middleware here, or combine a Django application with an application of another
framework.
"""
import os
# We defer to a DJANGO_SETTINGS_MODULE already in the environment. This breaks
# if running multiple sites in the same mod_wsgi process. To fix this, use
# mod_wsgi daemon mode with each site in its own daemon process, or use
# os.environ["DJANGO_SETTINGS_MODULE"] = "django_bookmarks.settings"
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "django_bookmarks.settings")
# This application object is used by any WSGI server configured to use this
# file. This includes Django's development server, if the WSGI_APPLICATION
# setting points here.
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
# Apply WSGI middleware here.
# from helloworld.wsgi import HelloWorldApplication
# application = HelloWorldApplication(application)
Django版本是1.5.1。
当我运行项目(ctrl+F11)时,控制台中没有错误,只有Eclipse文本编辑器中的内联错误标记。Eclipse显然以某种方式运行了以前版本的代码,并且在浏览器中显示了忽略此错误的以前版本。
早些时候,同样的代码工作得很好(这是书中的代码),因此我认为问题在于Eclipse中的一些设置,或者最终是我创建这个项目的方式。
我就是这样被创造出来的
我在这里读到,人们在导入模块时遇到问题,主要是因为app目录中缺少init.py,或者PYTHONPATH设置存在一些问题。我所读的并没有帮助我解决我的问题
*我是Django的乞丐,这是我第一次写Django。这是Ayman Hourieh《与Django一起学习网站开发》一书中的一个例子。您需要通知Python解释器查看上面的一个目录 尝试相对路径导入
from ..bookmarks.views import main_page
“..”表示查找上面的目录以查找书签包
我可以向您推荐一种更健壮的模式来实现这一点吗
django_bookmarks/ #project
django_bookmarks/
__init__.py
settings.py
urls.py
wsgi.py
bookmarks/ #made with python manage.py startapp bookmarks
__init__.py
models.py
test.py
views.py
urls.py # ADD another urls.py to your bookmarks app
manage.py
在django_书签/url.py中
from django.conf.urls import patterns, include, url
# from bookmarks.views import main_page # Remove this
# This directs Django to the urls.py within the bookmarks app
urlpatterns = patterns('',
(r'^$', include('bookmarks.urls'))
)
from django.conf.urls import patterns, include, url
from bookmarks import views
# This directs Django to the urls.py within the bookmarks app
urlpatterns = patterns('',
(r'^$', views.main_page)
# Now you can add more bookmark urls to match to bookmark views
)
在bookmarks/url.py中
from django.conf.urls import patterns, include, url
# from bookmarks.views import main_page # Remove this
# This directs Django to the urls.py within the bookmarks app
urlpatterns = patterns('',
(r'^$', include('bookmarks.urls'))
)
from django.conf.urls import patterns, include, url
from bookmarks import views
# This directs Django to the urls.py within the bookmarks app
urlpatterns = patterns('',
(r'^$', views.main_page)
# Now you can add more bookmark urls to match to bookmark views
)
此模式更易于维护,并允许所有书签url模式位于bookmarks/url.py中。好的,看起来我解决了这个问题。 问题在于我在Eclipse中制作这个Django项目的方式。 我使用了python
virtualenv
,它用自己的env/bin/python2.7
解释器创建了一个小环境,这个解释器应该在创建项目对话框中选择。
这个Python没有预先安装Django(当然),如果需要,您必须安装它。
我在使用virtualenv
制作的env/
中创建了这个项目,但将解释器设置保留为“默认”,因此PyDev使用的是来自system notenv/bin/python2.7
的python解释器,在其PYTHONPATH上找不到env/django\u书签/书签
应用程序,这导致了importorror
。
结论实际上是合乎逻辑的,若您在虚拟环境中创建Django项目,那个么您将使用虚拟环境中的python解释器。
感谢Paul Renton抽出您的时间。在
已安装的应用程序中是否有书签
?我认为在已安装的应用程序中添加书签在解决导入问题时不会产生任何影响。但事实上,如果他确实更正了导入内容,而它不在已安装的应用程序中,它将继续出错。这是您回答“如果您在虚拟环境中创建Django项目,您将使用虚拟环境中的python解释器。感谢您Paul Renton抽出时间。”这解决了问题。。。竖起大拇指…相对路径导入在这种情况下不起作用。我尝试了你上面的建议,得到了一个提示:没有名为bookmarks的模块。我认为问题在于书签模块不在PYTHONPATH上(我不知道为什么),解释器也没有看到这个模块,但我还不知道如何修复它。谢谢。你介意把你试过的东西贴出来吗?也可能是你的设置片段?这对我有用。我还对include函数进行了更改。尝试Instedi在包含函数的两个版本中都尝试了这个方法,但在这里不起作用。我刚刚用../django_bookmarks/settings、../django_bookmarks/wsgi和下面的一些信息编辑了这个问题。很抱歉,我无法确定还有什么可能是错误的。也许如果你再多发一点信息我就能弄明白。我发布的代码在我创建的一个项目中为我工作,该项目是为了模拟你的孩子,你让它工作了。确保使用一些相对导入:)