繁体   English   中英

Django(PyDev)中my_app.views的初步,未解决的导入

[英]Elementary, unresolved import from my_app.views in Django (PyDev)

我在home / DjangoProjects / django_bookmarks / env / django_bookmarks中的项目树如下所示:

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

在../bookmarks/views中:

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_bookmarks / urls有:

from django.conf.urls import patterns, include, url
from bookmarks.views import main_page # Unresolved import: main_page
# from bookmarks.views import * # Undefined variable: main_page in line below

...

urlpatterns = patterns('',
                       (r'^$', main_page)
)

编辑:

在../django_bookmarks/settings中:

    # 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_bookmarks/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中的一些设置,或者最终是我创建此项目的方式。 我是以这种方式创建的项目http://blog.bixly.com/post/25093181934/setting-up-eclipse-for-python-django-development

我在这里读到人们在导入模块时遇到问题,主要是因为app目录中缺少init .py或者PYTHONPATH设置存在问题。 我读到的内容并没有帮助我解决我的问题。

*我是Django的初学者,这是我第一次写Django。 这是“使用Django学习网站开发”一书中的一个例子,Ayman Hourieh。

您需要通知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_bookmarks / urls.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'))
)

在bookmarks / urls.py中

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 / urls.py中。

好的,看起来我解决了这个问题。 问题在于我在Eclipse中创建这个Django项目的方式。 我使用了python virtualenv ,它使用自己的env/bin/python2.7解释器创建了一个小环境,并且应该在创建项目对话框时选择此解释器。 这个Python没有预安装Django(当然),你必须安装它,如果你想要它。 我在env/创建了这个项目env/使用virtualenv但是将解释器设置保留为“Default”,因此PyDev使用了系统中的python解释器而不是env/bin/python2.7并且在他的PYTHONPATH上找不到env/django_bookmarks/bookmarks应用程序ImportError 结论实际上是合乎逻辑的,如果你在虚拟环境中制作Django项目,你可以使用虚拟环境中的python解释器。 谢谢Paul Renton的时间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM