Django - ImageField,在开发服务器中上传、存储和提供图像
Django - ImageField, upload, store and serve image in development server
我想在我的模型的管理表单中有一个 ImageField(例如,个人资料)。我想稍后在视图中显示此图像。
这是我的模型:
class Individual(models.Model):
ind_name = models.CharField(max_length=100)
ind_photo = models.ImageField(default="default.jpg")
def __str__(self):
return self.ind_name
这是我网站设置中的内容:
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, "static")
MEDIA_URL = '/static/media/'
MEDIA_ROOT = os.path.join(BASE_DIR,"static/media")
这些是我的应用程序的网址:
urlpatterns = [
url(r'^$', views.index, name="index")
]
我知道如何使用静态文件(例如 CSS、Javascript),并让它们在开发和生产中工作。
但我不知道如何让图像工作。我读过 Managing static files and Deploying static files,但我还是没看懂。
使用上面的代码,图像将保存在正确的文件夹中(即 /static/media 在我的站点级别)。但是我不知道:
1) 如何在模板中显示,
2) 是否最好将这些图像保存在我应用程序的静态文件夹中,
3) 和(如果 2)我是否需要 运行 每次有人在管理员中上传图片时收集静态信息。
对不起,如果我不清楚,但这种方式比我想象的更晦涩。
最好将静态文件和媒体文件分开。是的,如果将图像存储在静态文件夹中,则上传时必须始终执行 collectstatic。我们可以从对象中获取完整的图像 url,如下所示。
{{obj.ind_photo.url}}
有关文件的更多信息https://docs.djangoproject.com/en/1.10/topics/files/
为了在开发过程中上传和提供图像,我不得不将媒体文件夹移出静态文件夹(即在项目文件夹的根目录下创建一个媒体文件夹)。
在我的主 urls.py 中,我不得不添加:
from django.conf import settings
from django.conf.urls.static import static
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
根据 MicroPyramid 的建议。
为了在模板中显示它,对于给定的个人 "somebody"(来自查询集),我使用 :
<img src="{{ somebody.ind_photo.url }}">
我想在我的模型的管理表单中有一个 ImageField(例如,个人资料)。我想稍后在视图中显示此图像。
这是我的模型:
class Individual(models.Model):
ind_name = models.CharField(max_length=100)
ind_photo = models.ImageField(default="default.jpg")
def __str__(self):
return self.ind_name
这是我网站设置中的内容:
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, "static")
MEDIA_URL = '/static/media/'
MEDIA_ROOT = os.path.join(BASE_DIR,"static/media")
这些是我的应用程序的网址:
urlpatterns = [
url(r'^$', views.index, name="index")
]
我知道如何使用静态文件(例如 CSS、Javascript),并让它们在开发和生产中工作。 但我不知道如何让图像工作。我读过 Managing static files and Deploying static files,但我还是没看懂。
使用上面的代码,图像将保存在正确的文件夹中(即 /static/media 在我的站点级别)。但是我不知道:
1) 如何在模板中显示,
2) 是否最好将这些图像保存在我应用程序的静态文件夹中,
3) 和(如果 2)我是否需要 运行 每次有人在管理员中上传图片时收集静态信息。
对不起,如果我不清楚,但这种方式比我想象的更晦涩。
最好将静态文件和媒体文件分开。是的,如果将图像存储在静态文件夹中,则上传时必须始终执行 collectstatic。我们可以从对象中获取完整的图像 url,如下所示。
{{obj.ind_photo.url}}
有关文件的更多信息https://docs.djangoproject.com/en/1.10/topics/files/
为了在开发过程中上传和提供图像,我不得不将媒体文件夹移出静态文件夹(即在项目文件夹的根目录下创建一个媒体文件夹)。
在我的主 urls.py 中,我不得不添加:
from django.conf import settings
from django.conf.urls.static import static
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
根据 MicroPyramid 的建议。
为了在模板中显示它,对于给定的个人 "somebody"(来自查询集),我使用 :
<img src="{{ somebody.ind_photo.url }}">