我是django应用程序,使用nginx提供静态文件。我想在项目中包含app(功能)。
我想过创建newapp并将文件放在静态文件夹下。 (但我需要更改nginx conf以提供来自这些dirs的文件)
project
|
|-templates
|-static
|
|-js
|-css
newapp
|
|-static
|
|-js
|-css
这是保留静态文件,模板的首选方式(在应用程序中?(我认为该应用程序下的测试更清晰))
如果我们想从两个位置提供静态文件如何更改nginx conf?
我目前的nginx conf就像
location /static/ { alias /myproject/location/static/; }
如果我们把所有过滤器放在那个主要项目(静态,模板)中,它会变得复杂吗?
有没有办法匹配
alias / myproject / * / static
答案 0 :(得分:2)
这正是我们拥有staticfiles
app的原因。将每个应用程序的资产放在该应用程序中,然后在部署运行manage.py collectstatic
上,它们将全部收集在/ static /
答案 1 :(得分:2)
回答问题1:
将特定应用的静态文件放在应用的文件夹中,而不是项目的“静态”文件夹中。
/project/
/polls/
/static/
/polls/
foobar.css
foobar.js
/templates/
/polls/
vote.html
/static/
specific-to-the-project.js
/templates/
specific-to-the-project.html
base.html
关键是你的应用程序文件夹中有一个static
文件夹,并且其中有一个与你的应用程序同名的文件夹。
当您运行collectstatic
时,它将收集在这些文件夹中找到的所有文件。
请注意,在引用文件时,您将执行类似...
的操作{% load staticfiles %}
{% static 'app/foobar.css' %}
回答问题2:
当您运行collectstatic
时,它会收集所有文件并将其复制到STATIC_ROOT
设置指定的一个中心位置。
回答问题3:
不,因为您不使用STATIC_ROOT
中的文件。您只处理原始位置的文件,然后在准备好后运行collectstatic
。
回答问题4:
你可以做一个sym链接..
实际上,这就是staticfiles应用程序的用途。我建议在此处进行调整并阅读:https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/
更新回答评论
最佳做法是/<project_root>/polls/static/polls/foobar.css
而不是/<project_root>/polls/static/foobar.css
。然后从您的模板通过{% static 'polls/foobar.css' %}
而不是{% static 'foobar.css' %}
访问foobar.css。请参阅下面的示例。
示例强>
/<project_root>
/polls
views.py
urls.py
...
/templates
vote.html
...
/static
/polls
foobar.css
foobar.js
/otherapp
views.py
urls.py
...
/templates
hello.html
...
/static
foobar.css
foobar.js
/<static_root>
(empty)
/<project_root>
/polls
views.py
urls.py
...
/templates
vote.html
...
/static
/polls
foobar.css
foobar.js
/otherapp
views.py
urls.py
...
/templates
hello.html
...
/static
foobar.css
foobar.js
/<static_root>
foobar.css
foobar.js
/polls
foobar.css
foobar.js
每个应用程序中静态文件夹的内容都将复制到STATIC_ROOT目录中。
通过将文件直接放在静态文件夹中,再添加一个目录并将其放入其中,可能会导致文件夹冲突。
当您处理开源项目并且不知道应用程序的安装位置时,这一点更为重要。但它也被认为是最佳实践:)(我花了一段时间来适应它,但没有回头。)
此外,只要在您的INSTALLED_APPS中列出'polls',您就不需要将'polls / static / polls'添加到STATICFILES_DIRS。