我对Django静态文件有问题.

让我们假设Django被配置为100处的服务器.

当我的配置为:

STATIC_URL = "/static/"
MEDIA_URL = "/media/"
STATIC_ROOT = "/home/hostxxx/domains/webpage.com/DjangoApp/static"
MEDIA_ROOT = "/home/hostxxx/domains/webpage.com/DjangoApp/media"

Then Django looks for:
https://example.com/static/styles/style.css

但它并不存在:

GET https://example.com/static/styles/style.css net::ERR_ABORTED 404 (Not Found)

但该文件位于以下位置:

https://example.com/app/static/styles/style.css

但当我更改静态url时:

STATIC_URL = "/app/static/"

Then it looks for a good url: https://example.com/app/static/styles/style.css个 but now the staticfile is available here: https://example.com/app/app/static/styles/style.css

最新情况:

urls.py:

from django.contrib import admin
from django.urls import path

from mainapp import views

urlpatterns = [
    path("admin/", admin.site.urls),
    path("", views.lists, name="lists"), # MAIN VIEW
]

但也try 了将其作为urls.py:

from django.contrib import admin
from django.urls import path
from django.contrib.staticfiles.urls import staticfiles_urlpatterns

from mainapp import views

urlpatterns = [
    path("admin/", admin.site.urls),
    path("", views.lists, name="lists"),
]

urlpatterns += staticfiles_urlpatterns()

和base.html:

{% load static %}

<!DOCTYPE html>
<html lang="en">

<head>
    <title>AAA</title>
    <link rel="stylesheet" type="text/css"
        href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" />
    <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.11.5/css/jquery.dataTables.min.css" />
    <link rel="stylesheet" href="{% static 'styles/style.css' %}">  # HERE
...

主机使用Passenger_wsgi.py,即:

import imp
import os
import sys

sys.path.insert(0, os.path.dirname(__file__))

wsgi = imp.load_source("wsgi", "app/wsgi.py")
application = wsgi.application

django-admin --version:5.0.

python --version:Python 3.10.13.

The solution offered on every other topic: FORCE_SCRIPT_NAME = "/app" does not work. Django template is still searching for: https://example.com/static/styles/style.css and not for: https://example.com/app/static/styles/style.css个.

我读了很多答案,试了很多次,都没有用.

它工作得很好,当我设置Django项目没有应用程序前缀:100,但我有其他应用程序在那里服务,我需要添加前缀.

I don't understand, why it cannot generate a valid link for css: enter image description here The app/ part is still missing.

我应该如何正确配置Django静态文件来服务和搜索此css? https://example.com/app/static/styles/style.css

推荐答案

在生产中,Web服务器为您提供静态文件.因此,将文件移动/复制到服务器随后定向到的位置非常重要.您可以使用Comfy命令python manage.py collectstatic来实现这一点.这一点你可能已经知道并且已经做过了.

根据文件夹 struct 的不同,文件在为静态文件创建的文件夹中以不同的 struct 结束. 假设 struct 如下:

myproject/
 - myapp1/
   - static/
     - myapp1/
       - css/
         - styles.css

记住要给它命名空间,这意味着在myapp1的静态目录中创建另一个与app(Myapp1)相同的目录.现在运行collectstatic时,静态文件的结尾是<STATIC_ROOT>/myapp1/css/styles.css,您可以在模板中使用href="{% static 'myapp1/css/style.css' %}"来处理它们.这让你可以在你的应用程序之间分隔样式.请注意,您必须将appname(Myapp1)添加到静态路径中.

好的,到目前为止一切都很好.现在,下一步是配置您的Web服务器,使其能够正确地提供静态文件.必须满足的已发布URL为www.yourdomain.com/static/myapp1/css/styles.css.您必须配置您的Web服务器,使其将每个请求 bootstrap 到www.yourdomain.com/static/到您的静态文件夹,该文件夹位于<STATIC_ROOT>.

我敢肯定你的项目目录 struct 会误导collectstatic命令.另一个原因可能是您的Web服务器的错误配置.希望有帮助.

Django相关问答推荐

与django相关的预取n +1问题.我该怎么解决呢?

Django-将html数据保存到quillfield中

Django:我的上下文变量不能用于重复的for循环

在Django上传JPEG图像时遇到问题

根据当前对象中的多对多字段过滤对象

如何将数据库中的 None 序列化为空对象?

在Django Rest Framework中按模型属性排序时如何避免重新计算?

data._mutable= 在 Django REST 框架中为真

如何在 django 中修改现有模型实例?

如果上下文中缺少变量,如何使 Django 模板引发错误

在 Django 过滤器语句中,__exact 和等号 (=) 有什么区别?

Django ModelChoiceField optgroup 标签

django 模板 if 或语句

get_or_create() 线程安全吗

django 模板列表变量中的最后一个元素

如何在 django 中仅获取表的特定列?

Django/Python初学者:执行python manage.py syncdb时出错-找不到psycopg2

如何在 django 2.0 admin 中使用 allow_tags?

如何获取 Django 模型字段对象的值

判断列表 django 模板中是否存在