【问题标题】:Apache and Django阿帕奇和 Django
【发布时间】:2013-02-03 05:51:13
【问题描述】:

我正在尝试配置我的 Django 站点,以便它由 Apache 提供服务。

文件夹布局

`-- django
    |
    `-- webtools
        |-- 1
        |-- __init__.py
        |-- __init__.pyc
        |-- apache
        |   `-- django.wsgi
        |-- macmonster
        |   |-- __init__.py
        |   |-- __init__.pyc
        |   |-- models.py
        |   |-- models.pyc
        |   |-- tests.py
        |   |-- views.py
        |   `-- views.pyc
        |-- manage.py
        |-- modules
        |   |-- __init__.py
        |   |-- __init__.pyc
        |   |-- macaddr.py
        |   |-- macaddr.pyc
        |   |-- validate.py
        |   `-- validate.pyc
        |-- settings.py
        |-- settings.pyc
        |-- urls.py
        `-- urls.pyc

/etc/httpd/conf.d/django.conf

<VirtualHost *:80 >
  ServerName direct.macmonster.co.uk
  WSGIScriptAlias / /opt/django/webtools/apache/django.wsgi
</VirtualHost>

/opt/django/webtools/apache/django.wsgi

import os, sys

sys.path.append('/opt/django/webtools')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

我目前在日志中遇到的主要错误是:

TemplateSyntaxError: Caught ImportError while rendering: No module named webtools.macmonster

谢谢,

【问题讨论】:

  • 在我看来像是一个 PYTHONPATH 问题。你的 PYTHONPATH 上有合适的目录吗? Apache“用户”是否在该目录上设置了正确的权限?
  • Apache 具有读取、执行权限。至于 Pythonpath 附加的 sys.path 应该允许我从 webtools 文件夹中导入模块吗?所以我对出了什么问题有点困惑。谢谢
  • 我刚刚将 /opt/django/webtools 和 /opt/django 添加到 sys.path 中,现在一切正常。虽然我不知道为什么我需要添加这两个?

标签: python django


【解决方案1】:

如果 webtools 是您的顶级包,您应该将 /opt/django 添加到 sys.path,而不是 /opt/django/webtools

【讨论】:

  • 如果我将它添加到我的 sys.path 中,我会遇到 django 无法找到我的视图的问题?
  • 显然你导入的东西有些不一致。如果将/opt/django 添加到路径中,则可以导入webtools(以及通过webtools 导入它下面的所有内容)。如果将/opt/django/webtools 添加到路径中,则可以直接导入例如macmonster(否则只能使用from webtools import macmonster)。
  • 好的,谢谢,在 Django 中导入的常见做法是什么。只是项目还是 project.app ?
【解决方案2】:

此配置对我有用。这应该适合你。

import os, sys

root = os.path.join(os.path.dirname(__file__),'..')
sys.path.insert(0,root)
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "webtools.settings")

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-29
    • 1970-01-01
    • 2014-03-15
    相关资源
    最近更新 更多