Django:Templatetags不能与mod_wsgi

时间:2016-02-15 19:29:56

标签: python django mod-wsgi

一旦我完成并测试了一个模块,我想在生产服务器上部署我的应用程序。到目前为止,app正在使用Django 1.9.2框架(使用Python 3.5)开发嵌入式服务器。我在Centos 7上通过Apache通过mod_wsgi部署了Django。 我在部署后做了一些测试。似乎Templatetags无法正常工作,#34; 0"返回(或根本没有计算?)到模板,而mod_wsgi正在使用中。即使我将任何常量添加到templatetag(下面)并尝试将其返回到模板,也只是为了测试它是如何工作的。 我使用相同的机器(Linux)进行了完全相同的检查,但我使用了嵌入式服务器。在嵌入式服务器的情况下,所有信息都被正确传递和计数。 我认为这是与权限相关的问题。我仔细检查了这一点,似乎正确设置了所有文件访问权限。

<VirtualHost *:80>
        ServerName nid.example.com
        <Directory /home/nid/nid/nid>
            <Files wsgi.py>
                Require all granted
            </Files>
        </Directory>
        WSGIDaemonProcess nid python-path=/home/nid/nid:/home/nid/nid-venv/lib/python3.4/site-packages
        WSGIProcessGroup nid
        WSGIScriptAlias / /home/nid/nid/nid/wsgi.py
</VirtualHost>

templatetag:

from django import template
import datetime

register = template.Library()
@register.assignment_tag()
def count_expire_days(end_date, renew_date):
    last_valid_day = end_date
    first_renew_day = renew_date
    today = datetime.date.today()
    diff_last_day = last_valid_day - today
    diff_whole_period = last_valid_day - first_renew_day
    period = diff_whole_period.days
    expire_days = diff_last_day.days
    percentage = (expire_days/period)*100
    return int(percentage)

我正在玩文件权限,但没有运气。 有什么不对?如何调试Django templatetags,了解为什么这不起作用?

1 个答案:

答案 0 :(得分:0)

这个问题非常隐蔽。 我使用Centos 7.默认情况下它运行Python 2.7。即使我们安装Python 3.4(现在最新的Centos软件包)和所有周围的软件包,还有很多工作要做。我发现Django表明它仍然使用Python 2.7,而整个virtualenv是纯Python 3.4。

根本原因:过时的 mod_wsgi Apache模块。它的原始版本 3.4 ,而最新版本(支持Python 3) 4.4.22 。要解决此问题,您需要从源代码编译mod_wsgi并将其加载到Apache中。 更改后,应用程序正在按预期工作。所有值都正确计算。这不起作用的原因是python 2.7和3.4处理数据的方式不同。

灵感:running django python 3.4 on mod_wsgi with apache2