我的user_accounts / models.py文件中有一个ImageField,用于存储用户的个人资料图片。它有一个upload_to字段,用于调用函数并将文件上传到myproj / media /中的媒体文件夹。 。图像字段还有一个默认字段,用于设置静态文件夹中的默认配置文件图像。 这是开发服务器中用户表的条目。
在图片中,头像字段显示静态网址,但点击时,/ media /会在/ static /之前附加到网址,如下所示:
在图像中,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?
答案 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
的基类{。}}。