Django教程

关于Django--media,static文件夹的动态使用和静态使用

当我们刚开始使用Django的时候,会被media和static文件夹搞的团团转,下面就详解关于Django--media,static文件夹的动态使用和静态使用。

首先先搞懂关于settings.py的media和static文件夹路径问题,如下所示:

STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'html/static') # 上传到的文件的目录
STATIC_URL = '/static/'
MEDIA_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'html/media') # 上传到的文件的目录
MEDIA_URL ='/media/'  # url访问的路径

STATIC_ROOT是服务器的绝对路径,要注意BASE_DIR,可以根据自己的需求设置BASE_DIR

STATIC_URL是动态服务器使用/static/访问STATIC_ROOT目录的文件

还要在django根url设置static和media路径静态话,比如:

from django.conf.urls import url,include
from django.contrib import admin
from django.conf import settings
from django.views.static import serve

urlpatterns = [
    url(r'^aaa/', admin.site.urls),
    url(r'^ueditor/', include('DjangoUeditor.urls')),
    url(r'^', include('con.urls')),
    url(r'^', include('ty.urls')),
    url(r'^', include('min.urls')),
url(r'^static/(?P<path>.*)$', serve, {'document_root': settings.STATIC_ROOT}), # django动态用的
url(r'^media/(?P<path>.*)$', serve, {'document_root': settings.MEDIA_ROOT}), # django动态用的

]

配置完成后,例如动态服务器域名为api.python-china.com,那么当你使用api.python-china.com/static/aa.png,就是访问STATIC_ROOT目录的aa.png文件。

media也是同样的道理。

关于发布和编辑文章的时候,上传的图片和文件路径问题,在models.py的设置,比如:

class Contents(models.Model):
    title = models.CharField(max_length=200, verbose_name='标题')
    type = models.ForeignKey(Type, on_delete=models.CASCADE,verbose_name='栏目名称')
    short_title = models.CharField(max_length=100, verbose_name='简略标题')
    keys = models.CharField(max_length=50, verbose_name='关键字')
    description = models.TextField(max_length=400, verbose_name='描述')
    pub_date = models.DateTimeField(default=timezone.now, verbose_name='最后修改时间')
    is_delete = models.BooleanField(default=False, verbose_name='逻辑删除')
    body = UEditorField(width=1000, height=300, toolbars="full", imagePath="images/contents/",
                        filePath="files/contents/",
                        upload_settings={"imageMaxSize": 1204000}, settings={}, verbose_name='内容')

imagePath="images/contents/"的意思是上传到MEDIA_ROOT+images/contents/目录下,比如你的MEDIA_ROOT是/www/wwwroot/pc_django_root/html/media,那么你发布文章上传图片的路径就是/www/wwwroot/pc_django_root/html/media/images/contents/

然后根据静态和动态的配置就访问/www/wwwroot/pc_django_root/html/media/images/contents/目录下文件了。

最后修改:2021-06-30 22:01:43