• django配置静态文件


    关注 码龄 粉丝数 原力等级 -- 被采纳 被点赞 采纳率 midas_zf 2024-03-31 19:29 采纳率: 53.8% 浏览 1 首页/ 编程语言 / django配置静态文件 pythondjango后端有问必答 jdango 静态文件目录结构如下: setting配置文件如下: from pathlib import Path import os import datetime # Build paths inside the project like this: BASE_DIR / 'subdir'. BASE_DIR = Path(__file__).resolve().parent.parent # Quick-start development settings - unsuitable for production # See https://docs.djangoproject.com/en/5.0/howto/deployment/checklist/ # SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = "django-insecure-#g_6e+4_7)@elb46^#)-wi91iu8bb93dnz!rv8zyi@94rwqd0l" # SECURITY WARNING: don't run with debug turned on in production! DEBUG = True ALLOWED_HOSTS = ['*'] # Application definition INSTALLED_APPS = [ "django.contrib.admin", "django.contrib.auth", "django.contrib.contenttypes", "django.contrib.sessions", "django.contrib.messages", "django.contrib.staticfiles", 'app1', 'app2', 'app3', ] MIDDLEWARE = [ "django.middleware.security.SecurityMiddleware", "django.contrib.sessions.middleware.SessionMiddleware", "django.middleware.common.CommonMiddleware", "django.middleware.csrf.CsrfViewMiddleware", "django.contrib.auth.middleware.AuthenticationMiddleware", "django.contrib.messages.middleware.MessageMiddleware", "django.middleware.clickjacking.XFrameOptionsMiddleware", ] ROOT_URLCONF = "myshop.urls" TEMPLATES = [ { "BACKEND": "django.template.backends.django.DjangoTemplates", "DIRS": [os.path.join(BASE_DIR, 'templates')], "APP_DIRS": True, "OPTIONS": { "context_processors": [ "django.template.context_processors.debug", "django.template.context_processors.request", "django.contrib.auth.context_processors.auth", "django.contrib.messages.context_processors.messages", 'django.template.context_processors.media', ], }, }, ] # print(TEMPLATES[0]['DIRS'][0]) WSGI_APPLICATION = "myshop.wsgi.application" # Database # https://docs.djangoproject.com/en/5.0/ref/settings/#databases DATABASES = { "default": { "ENGINE": "django.db.backends.sqlite3", "NAME": BASE_DIR / "db.sqlite3", } } # Password validation # https://docs.djangoproject.com/en/5.0/ref/settings/#auth-password-validators LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'console':{ 'level':'DEBUG', 'class':'logging.StreamHandler', }, }, 'loggers': { 'django.db.backends': { 'handlers': ['console'], 'propagate': True, 'level':'DEBUG', }, } } AUTH_PASSWORD_VALIDATORS = [ { "NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator", }, { "NAME": "django.contrib.auth.password_validation.MinimumLengthValidator", }, { "NAME": "django.contrib.auth.password_validation.CommonPasswordValidator", }, { "NAME": "django.contrib.auth.password_validation.NumericPasswordValidator", }, ] # Internationalization # https://docs.djangoproject.com/en/5.0/topics/i18n/ LANGUAGE_CODE = "en-us" TIME_ZONE = "UTC" USE_I18N = True USE_TZ = True # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/5.0/howto/static-files/ STATICFILES_DIRS=[os.path.join(BASE_DIR,'static')] STATIC_URL = '/static/' STATIC_ROOT = os.path.join(BASE_DIR, '/static') MEDIA_URL="/media/" MEDIA_ROOT=os.path.join(BASE_DIR,"media") # Default primary key field type # https://docs.djangoproject.com/en/5.0/ref/settings/#default-auto-field CACHES={ 'default':{ 'BACKEND':'django.core.cache.backends.db.DatabaseCache', 'LOCATION':'my_cache_table', } } REST_FRAMEWORK = { #'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination', #'PAGE_SIZE': 2, # 过滤器默认后端 'DEFAULT_FILTER_BACKENDS': ( 'django_filters.rest_framework.DjangoFilterBackend', ), 'DEFAULT_AUTHENTICATION_CLASSES': ( #'rest_framework_jwt.authentication.JSONWebTokenAuthentication', 'rest_framework.authentication.BasicAuthentication', 'rest_framework.authentication.SessionAuthentication', #'rest_framework.authentication.TokenAuthentication', ), 'DEFAULT_PERMISSION_CLASSES': ( 'rest_framework.permissions.IsAuthenticated', ), #'DEFAULT_RENDERER_CLASSES':( # 'app8.customrender.CustomRender', #) #不然会提示 'AutoSchema' object has no attribute 'get_link' 'DEFAULT_SCHEMA_CLASS':'rest_framework.schemas.coreapi.AutoSchema', #'EXCEPTION_HANDLER': 'app8.customexception.custom_exception_handler' } # DRF扩展缓存时间 REST_FRAMEWORK_EXTENSIONS = { # 缓存时间,单位秒 'DEFAULT_CACHE_RESPONSE_TIMEOUT': 60, # 缓存存储 'DEFAULT_USE_CACHE': 'default', } JWT_AUTH = { 'JWT_EXPIRATION_DELTA': datetime.timedelta(seconds=3000), # Token 过期时间为一周 'JWT_AUTH_HEADER_PREFIX': 'JWT', # Token的头为:JWT XXXXXXXXXXXXXXXXXXXXXX 'JWT_ALLOW_REFRESH': False, #自定义返回认证信息 'JWT_RESPONSE_PAYLOAD_HANDLER':'app8.jwt_utils.jwt_response_payload_handler' } # session的存储配置 SESSION_ENGINE = 'django.contrib.sessions.backends.cache' SESSION_CACHE_ALIAS = 'default' # 设置session失效时间,单位为秒 SESSION_COOKIE_AGE = 60*5 测试html代码如下: 测试静件的使用
    测试背景设置图片
    测试修改背景
    测试html和css的相对关系 运行后报错信息如下: 展开全部 收起 写回答 好问题 0 提建议 追加酬金 关注问题 微信扫一扫 点击复制链接 分享 邀请回答 编辑 收藏 删除 结题 收藏 举报 追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金 ¥ 0 (可追加 ¥500) ¥ 15¥ 20¥ 50¥ 100¥ 200 支付方式 扫码支付 二维码出错 点击刷新 支付金额 15 元 提供问题酬金的用户不参与问题酬金结算和分配 支付即为同意 《付费问题酬金结算规则》 结题 再想想 删除 再等等

    4条回答 默认 最新

    • 专家-赤兔[在线] 全栈领域优质创作者 2024-03-31 19:29
      关注

      引自免费微信小程序:皆我百晓生

      在 Django 中配置静态文件,你需要按照以下步骤操作:

      1. 安装 Django: pip install django

      2. 设置 Django 应用项目结构: 创建一个名为 myshop 的 Django 模块,并创建三个子模块,分别为 app1, app2, 和 app3. 其中:

        • app1:这个应用负责处理静态文件。
        • app2:用于保存并处理静态图像文件。
        • app3:用于处理其他与静态文件相关的功能。

        myshop/models.py 文件中定义应用程序模型类,例如:

        from django.db import models
        from django.utils import timezone
        
        class MyModel(models.Model):
            name = models.CharField(max_length=100)
            description = models.TextField()
            created_at = models.DateTimeField(auto_now_add=True)
            updated_at = models.DateTimeField(auto_now=True)
        
            def __str__(self):
                return self.name
        

        要确保将 MyModel 类放置到正确的地方,即放在 .models.py 目录下,或者使用绝对路径指定:

        models.py
        
      3. 初始化项目: 执行以下命令在当前工作目录创建一个虚拟环境并激活它(对于Windows、macOS 和 Linux 系统):

        python -m venv myenv
        source myenv/bin/activate
        

        若要从虚拟环境中退出,请执行以下命令:

        deactivate
        
      4. 设置 Django DJANGO_SETTINGS_MODULE: 将以下设置环境变量添加到您的 .bashrc 或 .bash_profile 文件中:

        export DJANGO_SETTINGS_MODULE=myshop.settings
        

        避免更改 Django 默认的 SettingsModule 并替换为 myshop.settings。在您的 Django 环境变量中键入 DJANGO_SETTINGS_MODULE 后,系统将会自动加载名为 myshop 的 Django settings.py 文件。

      5. 创建静态文件的目录结构: 安装 Nginx 服务器以部署模板。以下是安装 Nginx 的步骤:

        • 对于 Windows:

          pip install nginx
          
          • 对于 macOS 或 Linux:
          sudo apt-get update
          sudo apt-get install nginx
          

        在项目的根目录下创建一个名为 nginx.conf 的文件,并包含以下内容:

        server {
            listen 80;
            server_name myshop.example.com;
        
            location / {
                root /path/to/myproject/static;
                try_files $uri @rewrite;
            }
        
            location ~ ^/(stylesheets|images)/ {
                alias /path/to/myproject/static/$uri;
            }
        
            location ~ ^/(javascripts)/ {
                alias /path/to/myproject/static/$uri;
            }
        
            location ~ ^/(views)/ {
                alias /path/to/myproject/static/$uri;
            }
        
            error_page 404 /index.html;
            access_log /var/log/nginx/access.log;
        
            location @rewrite {
                rewrite ^/(stylesheets|images|javascripts|views)$ /$uri permanent;
            }
        }
        
        server {
            listen 80;
            server_name myshop.example.com;
        
            location / {
                root /path/to/myproject/static;
                try_files $uri @rewrite;
            }
        
            location ~ ^/(robots.txt)/ {
                serve off;
            }
        
            location ~ ^/(caching/) {
                add_header Cache-Control "no-store";
                add_header Pragma "no-cache";
                add_header expires ".1d";
                proxy_cache_path "/etc/nginx/proxy_cache levels=public keys=private keys的社会元组=4664a318-2ac9-4257-a23f-d14f2d61ebaf cachecontrol_lax max-age=3600 public";
                proxy_cache_valid 200 304 60 seconds;
            }
        
            location @rewrite {
                rewrite ^/(stylesheets|images|javascripts|views)$ /$uri permanent;
            }
        }
        
        server {
            listen 80;
            server_name myshop.example.com;
        
            location / {
                root /path/to/myproject/static;
                try_files $uri @rewrite;
            }
        
            location ~ ^/(robots.txt)/ {
                serve off;
            }
        
            location ~ ^/(caching/) {
                add_header Cache-Control "no-store";
                add_header Pragma "no-cache";
                add_header expires ".1d";
                proxy_cache_path "/etc/nginx/proxy_cache levels=public keys=private keys的社会元组=4664a318-2ac9-4257-a23f-d14f2d61ebaf cachecontrol_lax max-age=3600 public";
                proxy_cache_valid 200 304 60 seconds;
            }
        
            location @rewrite {
                rewrite ^/(stylesheets|images|javascripts|views)$ /$uri permanent;
            }
        }
        

        全部配置完成后,运行以下命令启动 Nginx:

        nginx -t
        nginx -s reload
        
      6. 创建静态文件路径映射: 在每个 Web 文件夹下(例如 app1/static, app2/static, etc.)创建一个文件夹,并将其路径写入 urls.py 文件中。将所有静态文件路径映射到 URL 根目录下的对应位置:

        from django.urls import path
        from myshop import views
        
        urlpatterns = [
            path('static/', include(['myshop.urls'])],
            # ...
        ]
        

        确保每个模板文件都包含相应的静态文件链接: 在 myshop/templates 目录下,为每个模板文件创建一个名为 _static 的子目录,然后将以下文件放入其中:

        from django.shortcuts import render
        
        def index(request):
            # ...
        
            context = {
                'static_images': myshop.models.MyModel.objects.all(),
                # ...
            }
        
            return render(request, 'myshop/index.html', context)
        
        def static_image(request, filename):
            return render(request, 'myshop/static/images/{filename}', {'filename': filename})
        

        myshop/views.py 文件中添加这些模板:

        from django.shortcuts import render
        from django.views import generic
        from .models import MyModel
        
        def index(request):
            context = {
                'model_list': MyModel.objects.all(),
                # ...
            }
        
            return render(request, 'myshop/index.html', context)
        
        def static_image(request, filename):
            return render(request, 'myshop/static/images/{filename}', {'filename': filename})
        
      7. 构建 URL 命令: 使用 urlresolvers 工具在 urls.py 文件中定义 URL 解析器,以便使用动态URL解析器(例如 reverse() 函数):

        urlresolvers = {
            '/static//', views.StaticFileView.as_view(),  # 填充 pk 参数
            '/style/[id]', views.StaticStyleView.as_view(),  # 填充 id 参数
            # ...
        }
        

        运行 python manage.py startproject myshop 命令生成项目配置文件,并启动 Nginx 服务器。

      8. 添加静态资源验证器: 在 myshop/wsgi.py 文件中添加 StaticFilesMiddleware 来处理静态文件请求:

        from django.http import HttpResponse
        from django.views.decorators.static import require_http_methods, require_GET, require_POST, require_file
        
        
        def view_static_file(*args, **kwargs):
            if not isinstance(args[0], list):
                raise ValueError("Only one argument is expected as an array of filenames.")
            file_names = args[0]
        
            if not all([file_name.endswith('.css') for file_name in file_names]):
                raise ValueError(f"{file_name} should be a .css file.")
        
            media_url = reverse('media', kwargs={'pk': int(file_names[0])})
            response = HttpResponse(MIMEType='text/css')
            response['Content-Disposition'] = f"attachment; filename={file_names[0]}"
            response['Content-Type'] = 'text/css;charset=utf-8'
            return response
        
        @require_http_methods(['GET'])
        @require_GET
        @require_POST
        @require_file
        @require_from_directory('/media', 'static')
        def static_media(request):
            media_content = request.files.getlist('media')
        
            for file in media_content:
                media_url = reverse('media', kwargs={'pk': int(file[0])})
        
                response = HttpResponse(MIMEType='text/css')
                response['Content-Disposition'] = f"attachment; filename={file[0]}"
                response['Content-Type'] = 'text/css;charset=utf-8'
                response.write(media_url.read())
                media_url.close()
        
                return response
        
        # 添加其他视图和模板函数,如个性化模板渲染等
        # ...
        

        记住在实际生产环境中,应将上述代码中的 media_url 替换为实际的静态文件 URL,并根据需要添加更多的路由逻辑。

      9. 测试静态文件的功能: 运行以下命令启动 Django 服务器,访问静态文件页面以验证

      展开全部

      评论 编辑记录
    • 码农阿豪 Java领域优质创作者 2024-03-31 19:30
      关注
      让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
      请问如何在 Django 中配置静态文件路径?需要注意什么? 在 Django 中配置静态文件路径需要在 settings.py 文件中进行配置,主要包括以下几个步骤:
      1. 在 settings.py 中定义 STATIC_URL(静态文件访问路径) 和 STATICFILES_DIRS(本地静态文件所在路径)
      STATIC_URL = '/static/'
      STATICFILES_DIRS = [
          os.path.join(BASE_DIR, 'static')
      ]
      
      1. 在项目的 urls.py 文件中,添加 urlpatterns 来指定静态文件的访问路径和所在目录
      from django.conf import settings
      from django.conf.urls.static import static
      urlpatterns = [
          # ... other URL patterns ...
      ] + static(settings.STATIC_URL, document_root=settings.STATICFILES_DIRS)
      

      需要注意的是,STATIC_URL 和 urlpatterns 中的路径必须完全一致,否则静态文件将无法访问。 此外,建议将静态文件放在一级目录的 static 文件夹下,以便管理和维护。 以下是完整的 settings.py 文件的静态文件配置代码:

      # Build paths inside the project like this: BASE_DIR / 'subdir'.
      BASE_DIR = Path(__file__).resolve().parent.parent
      # Static files (CSS, JavaScript, Images)
      # https://docs.djangoproject.com/en/3.2/howto/static-files/
      STATIC_URL = '/static/'
      STATICFILES_DIRS = [
          os.path.join(BASE_DIR, 'static')
      ]
      

      以下是完整的 urls.py 文件的静态文件配置代码:

      from django.conf import settings
      from django.conf.urls.static import static
      from django.contrib import admin
      from django.urls import path, include
      urlpatterns = [
          path('admin/', admin.site.urls),
          path('', include('app.urls')),
      ] 
      if settings.DEBUG:
          urlpatterns += static(settings.STATIC_URL, document_root=settings.STATICFILES_DIRS)
      

      展开全部

      评论
    • CSDN-Ada助手 CSDN-AI 官方账号 2024-03-31 22:19
      关注

      【相关推荐】



      • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7795537
      • 你也可以参考下这篇文章:Django中如何配置CSS文件
      • 除此之外, 这篇博客: Django-实现登录图文验证中的 第八步: 精细化setting配置 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
        # django_simple_captcha 验证码配置其他配置项查看文档
        # 默认格式
        CAPTCHA_OUTPUT_FORMAT = '%(image)s %(text_field)s %(hidden_field)s '
        CAPTCHA_NOISE_FUNCTIONS = ('captcha.helpers.noise_null', # 没有样式
        # 'captcha.helpers.noise_arcs', # 线
        # 'captcha.helpers.noise_dots', # 点
        )
        # 图片中的文字为随机英文字母,如 mdsh
        CAPTCHA_CHALLENGE_FUNCT = 'captcha.helpers.random_char_challenge'
        # 图片中的文字为数字表达式,如2+2=
        #CAPTCHA_CHALLENGE_FUNCT = 'captcha.helpers.math_challenge'
        # 超时(minutes)
        CAPTCHA_TIMEOUT = 1
        

      如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
      评论
    • 流华追梦 Java领域新星创作者 2024-04-01 10:34
      关注

      在 settings.py 中定义 STATIC_URL(静态文件访问路径) 和 STATICFILES_DIRS(本地静态文件所在路径)

      评论
    编辑
    预览

    报告相同问题?

  • 相关阅读:
    单向环形链表构建(思路分析) [Java][数据结构]
    springboot+vue+elementUI 健身房私人健身与教练预约管理系统 #毕业设计
    linux学习笔记
    Docker容器
    开发一款回合制游戏,需要注意什么?
    ROS机器人RIKIBOT硬件介绍
    分布式.常用架构和服务拆分
    【华为HCIP | 华为数通工程师】刷题日记1116(一个字惨)
    数仓(二)
    刨根问底 Redis, 面试过程真好使
  • 原文地址:https://ask.csdn.net/questions/8081950