繁体   English   中英

Django STATIC_URL的说明

[英]Django STATIC_URL clarification

我已经阅读了关于stackoverflow和django网站上的其他主题,但是我仍然感到困惑。

这些是我的配置:

STATIC_ROOT = os.path.join(BASE_DIR, 'assets')
STATIC_URL = '/static/'

当我运行manage.py collectstatic ,我的静态文件将在myproject/assests/收集。

我将在此处存储默认的个人资料照片(供我的模型使用): myporject/static/images/default_profile_photo.png ,因此当我运行收集静态照片时,它将被复制到myproject/assets/images/default_profile_photo.png

到目前为止一切都很好。

在我的models.py中,我有一个字段:

class UserProfile(models.Model):
    photo = models.ImageField(upload_to = get_upload_file_name,
                              storage = OverwriteStorage(),
                              default = 'path/to/my/default/image.jpg'))

我的主要问题是:应将此默认属性设置为哪个路径? 我应该从STATIC_URL中受益吗?

其他问题:如何在这里使用settings.py中的STATIC_URL? STATIC_URL的用途是什么? 在哪里以及如何看到使用STATIC_URL ='/ static /'和STATIC_URL ='/ wtf /'之间的效果

   os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(__file__)))), 'static', 'templates'),

对于每个“ os.path.dirname()”,我在下面还包含一个与父目录相对应的文件,因此在我的示例中,我有四个,它表明根文件夹为当前目录上方的4个文件夹。

上载的文件始终位于MEDIA_ROOT的子目录中,并从MEDIA_URL引用。

对于任何FileField (如ImageField ),您只需给出将用于存储上载到此模型的文件的子目录

如果您将MEDIA_ROOT作为'/foo/bar/uploads/' ,那么在您的模型中,您将具有以下内容:

class Foo(models.Model):
    photo = models.ImageField(upload_to='photos')

然后,所有上传的照片将存储在/foo/bar/uploads/photos/

collectstatic不同,没有命令来管理媒体文件。 您必须自己处理。

现在设置默认值; 除了路径之外,您还可以添加可调用对象 (函数)的名称,该名称在保存对象实例时被调用。 您可以利用此:

import os

from django.contrib.staticfiles import finders
from django.config import settings


def get_default_photo_path():
   results = finders.find('/default/image.jpg')
   if results:
       return os.path.join(settings.STATICFILES_DIRS[0], results[0])

class Foo(models.Model):

    photo = models.ImageField(upload_to='photos',
                              default=get_default_photo_path, null=True)

现在,无论何时创建新对象,默认值都是/default/image.jpg的静态文件路径。 如果由于某种原因该文件不存在(例如,你忘了将它添加), None将被退回。 在其他存储方式中,您必须设置null=True

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM