Django 1.10中的静态和媒体文件

时间:2018-01-28 12:14:28

标签: django django-templates django-rest-framework django-views

我的user_accounts / models.py文件中有一个ImageField,用于存储用户的个人资料图片。它有一个upload_to字段,用于调用函数并将文件上传到myproj / media /中的媒体文件夹。 。图像字段还有一个默认字段,用于设置静态文件夹中的默认配置文件图像。 这是开发服务器中用户表的条目。

The Avatar field shows the static url

在图片中,头像字段显示静态网址,但点击时,/ media /会在/ static /之前附加到网址,如下所示:

Check the url in urlbar

在图像中,url栏在静态url之前显示/ media /附加。当我手动从url中删除/ media /时,将显示defaultProfileImage。

这是我的项目结构

|-myproj
  |-myproj
    |-__init__.py
    |-settings.py
    |-urls.py
    |-wsgi.py
  |-static
    |-user_accounts
      |-images
        |-defaultrofileImage.png
  |-user_accounts
    |-__init__.py
    |-models.py
    |-admin.py
    |-tests.py
    |-views.py
    |-urls.py

Models.py文件

from __future__ import unicode_literals
from django.db import models
from django.contrib.auth.models import AbstractUser



def get_upload_url(instance , filename):
    return 'userProfileImages/%s/%s'%(instance.username , filename)

class  User(AbstractUser):
    mobileNumber = models.IntegerField(blank = True , null = True)
    avatar = models.ImageField(upload_to = get_upload_url , default = '/static/user_accounts/images/defaultProfileImage.png')

def __str__(self):
    return self.username

我在settings.py文件中添加了以下行:

AUTH_USER_MODEL = 'user_accounts.User'

STATIC_URL = '/static/'

STATICFILES_DIRS =[
    os.path.join(BASE_DIR,'static'),
]


MEDIA_ROOT = os.path.join(BASE_DIR,'media')

MEDIA_URL = '/media/'

这是我的urls.py文件

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



urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^api-auth/', include('rest_framework.urls')),
    url(r'^user/',include('user_accounts.urls')),
] + static(settings.MEDIA_URL , document_root = settings.MEDIA_ROOT)

我应该如何更正网址,以便当我点击管理面板中的网址时,它会在网址栏中显示正确的网址,然后我会看到defaultProfileImage?

1 个答案:

答案 0 :(得分:0)

state默认值是指ImageField,因此您应该创建'MEDIA_URL'文件夹,将media放在那里并在模型字段中使用defaultProfileImage,如在您的示例中,它将图片路径解析为default = 'defaultProfileImage.png',因此您获得了MEDIA_URL + default

您可能会从模型字段中省略/media/static/...并覆盖default=方法以编程方式定义save字段的路径。

通常,用户上传的媒体文件位于avatar中的MEDIA_ROOT和静态资源中。

您可以找到更多信息here,并阅读STATIC_DIRS FileField的基类{。}}。