使用collectstatic时,Django url模板标记对于部署子目录不正确

时间:2014-01-07 19:54:41

标签: django django-templates

我正在我的网站的子目录下部署我的django项目,例如

http://example.com/apps/[django urls]

问题是当我运行collectstatic时,我正在使用的特定插件(dajaxice)使用{%url%}标记来创建适当的javascript代码。由于collectstatic不知道部署子路径,因此反向查找是根URL而不是子路径。例如,它应该是:

/apps/dajaxice/my_func

而不是:

/dajaxice/my_func

有没有一种很好的方法来改变collectstatic在不破解插件的情况下反向网址的方式?我唯一能想到的是为collectstatic提供一个url规范,其中包括'apps'子路径,另一个不包含其他所有子路径。但是,我无法弄清楚如何仅在使用collectstatic时更改settings.py。任何建议或替代解决方案?

1 个答案:

答案 0 :(得分:0)

我终于找到了解决这个问题的方法。 Dajaxice提供了更改网址前缀的设置:

DAJAXICE_MEDIA_PREFIX = 'dajaxice'

通过定义此设置,要在子路径中包含“apps”,我们可以获取所需的网址。问题是这个前缀只能在collectstatic命令中更改,而不能在提供网页时更改。其中有一点。

解决方案是创建另一个settings.py文件,我们称之为settings_cli.py。它看起来像:

from settings import *

DAJAXICE_MEDIA_PREFIX = 'apps/dajaxice'

接下来,我们必须通过更改manage.py文件来执行命令时加载新的设置文件。第6行现在将为:

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "MYPROJ.settings_cli")

它正式提到“MYPROJ.settings”。

现在,当我们跑:

python manage.py collectstatic

它将使用我们的特殊前缀,但不会影响提供网页时所需的正常前缀。

有关多个设置文件的详细信息,一个很好的参考是http://www.djangobook.com/en/2.0/chapter12.html