当前位置: 首页 > 知识库问答 >
问题:

如何在django应用程序中保存静态文件,如何从nginx的多个位置为静态文件提供服务器

苏磊
2023-03-14

我有一个django应用程序,静态文件使用nginx服务。我想在项目中包括应用程序(功能)。

我想创建一个新应用程序,把文件放在静态文件夹下。(但我需要更改nginx conf以提供来自这些dir的文件)

project
 |
 |-templates
 |-static
    |
    |-js
    |-css


 newapp
 |
 |-static
    |
    |-js
    |-css

>

如果我们想从两个位置提供静态文件,如何更改nginx conf?

我当前的nginx配置如下

location /static/ {  alias /myproject/location/static/; }

如果我们把所有文件都放在主项目中(静态、模板),维护起来会不会变得复杂?

有没有办法像

别名/myproject/*/static

共有2个答案

郑胡媚
2023-03-14

对问题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

关键是你有一个静态文件夹在你的应用程序的文件夹,它有一个文件夹与你的应用程序同名。

当您运行collectstatic时,它将收集在这些文件夹中找到的所有文件。

注意,当引用文件时,您将执行类似于...

{% load staticfiles %}
{% static 'app/foobar.css' %}

对问题2的答复:

当您运行集合静态时,它将收集所有文件并将其复制到一个由STATIC_ROOT设置指定的中心位置。

对问题3的答复:

不,因为您不处理STATIC_ROOT中的文件。您只对原始位置的文件进行处理,然后在准备好后运行收集静态

对问题4的答复:

你可以做一个符号链接。。

实际上,这就是staticfiles应用程序的用途。我建议对其进行改编,并在此处阅读:https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/

更新回复评论

最佳做法是这样做/

实例

/<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

每个应用程序中静态文件夹的内容都复制到静态根目录中。

您将文件直接放在静态文件夹中,而不是再添加一个目录并将它们放在其中,从而存在文件名冲突的风险。

当你正在进行一个开源项目,并且不知道该应用程序将安装在哪里时,这一点更为重要。但这也被认为是最佳实践:)(我花了一段时间来适应它,但没有回头看。)

此外,只要INSTALLED_APPS中列出了民意调查,您就不需要向STATICFILES_DIRS添加民意调查/静态/民意调查。

曹浩淼
2023-03-14

这就是为什么我们有静态文件应用程序。将每个应用程序的资产放在该应用程序中,然后在部署时运行manage.py收集静态,它们都将被收集在 /static/下的子目录中

 类似资料:
  • 问题内容: 这个问题已经被回答了好几次了,我已经看到了几乎所有相关的帖子,但是无法加载CSS文件。我在我的项目中有以下结构:中,我有以下代码: 在urls.py中,我有以下代码: 我在模板中使用它 我在做什么错?我应该做什么?例如应该在中添加任何内容?或在的设置中?请假设我是一个绝对的初学者。我真的需要一个答案。谢谢。 问题答案: 什么都不做的装饰器类如下所示: 然后您可以正常应用它:

  • 问题内容: 我有一个具有以下结构的Web应用程序: 我已经设法使用nginx和wsgi运行Web应用程序,但是问题是没有提供静态文件,我的意思是,当我转到它们的URL时,服务器找不到它们。它给我404。 这是我的nginx配置文件部分: 缺少什么吗? 问题答案: 将此添加到你的nginx配置 用你应用的绝对路径替换时,你应该注意它不包含静态目录,并且其中的所有内容都将存储在中。

  • 我从Apache切换到Nginx,使用apache,皮肤文件夹中的所有静态文件(图像、css、javascript)都直接由Apache提供服务。 示例: 我读了一些关于Nginx和Plone的文档,但我没有看到。下面是Plone.orgconf的例子:https://github.com/plone/plone-org-nginx/blob/master/nginx.conf 所以,我的问题是:

  • 问题内容: 我正在为Django使用apache + mod_wsgi。 并且所有css / js / images都通过提供。 出于某种奇怪的原因,当其他人/朋友/同事尝试访问该网站时,jquery / css不会为他们加载,因此页面看上去很混乱。 我的html文件使用这样的代码- 我的nginx配置是这样的 有一个目录,其中有相应的&目录。 奇怪的是,当我访问它们时页面显示正常。 我已经清除了

  • 问题内容: 所以这很尴尬。我有一个应用程序,该应用程序已集成在一起,现在它只提供一个静态HTML页面,其中包含指向CSS和JS的链接。而且我找不到文档中描述返回静态文件的位置。是的,我可以使用,但是我知道数据没有模板化。我还以为或者是正确的事情,但我不能让这些工作。同时,我正在打开文件,阅读内容,并装配Response具有适当mimetype的: 有人要为此提供代码示例或网址吗?我知道这将变得简单

  • 我一直在处理将一个站点从Apache迁移到Nginx的过程,我快要失去理智了。虚拟主机不想提供静态资源(css、js等),我似乎不知道为什么。服务器块看起来像这样: 我错过了什么?我知道这是因为我对Nginx缺乏经验,但任何建议都将不胜感激。 谢谢 更新 这似乎与我以前遇到麻烦的化名有关。如果我将我的文档根指向别名位置(),并尝试呈现没有别名的静态内容,它会呈现良好的效果。一旦我在网址中输入别名.