我正在我的网站的子目录下部署我的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。任何建议或替代解决方案?
答案 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