我是django的新手,我对图像显示问题感到困惑。 现在我有一个在后端生成的文字云的图像(让我们说主题词.py),我不知道如何应对它。 (1)如何将其存储在模型UserProfile的图像字段中?在models.py中,我有:
class UserProfile(models.Model):
user = models.OneToOneField(User)
tagcloud = models.ImageField(upload_to ='rap_song/raptle/pic/')
直接做是这样的:
user.userprofile.tagcloud = wc #wc is the image generated
(2)MEDIA_ROOT和MEDIA_URL的设置应该是什么?
(3)我应该如何在.html中显示它?
<img src = "???">
非常感谢!
答案 0 :(得分:0)
MEDIA_URL
应该是这样的:
MEDIA_ROOT='(the full path to the media folder)' (i.e: '/home/jason/work/project/media/')
MEDIA_URL='/media/'
并将这些行添加到urls.py
文件的末尾:
urlpatterns += staticfiles_urlpatterns()
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
您可以使用以下方式在模板中访问它:
<img src = "{{ user.userprofile.tagcloud.url }}">
如果要手动在Django中设置ImageField路径,则可以保存图像文件,然后在保存模型实例时设置路径值。您可以参考此link获取更多信息。
答案 1 :(得分:0)
settings.py
MEIDA_URL = '/pic/'
MEDIA_ROOT = os.path.join(REPOSITORY_ROOT, 'pic/')
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(REPOSITORY_ROOT, 'static/')
STATICFILES_DIRS = (
os.path.join(BASE_DIR, "static"),
'/var/www/static/',
)
urls.py
from django.conf.urls import include, url
from django.contrib import admin
from django.conf import settings
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from django.conf.urls.static import static
urlpatterns = [
......
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
urlpatterns += staticfiles_urlpatterns()
models.py
class UserProfile(models.Model):
user = models.OneToOneField(User)
tagcloud = models.ImageField(upload_to ='rapper/')
topicWords.py
d = path.dirname("/rapper/")
wc = WordCloud(background_color="white", max_words=2000, font_path='WeibeiSC-Bold.otf')
# generate word cloud
wc.generate_from_frequencies(word_tag)
# save to the "rapper/", right?
wc.to_file(path.join(d,"rapper1.png"))
userprofile.tagcloud = "rapper/rapper1.png"
userprofile.save()
答案 2 :(得分:0)
Django的models.ImageField
有save()
方法继承自FileField
,通常是您在服务器上生成图像时要使用的方法。该方法负责upload_to
并且还可以与其他文件存储后端一起使用。
from io import BytesIO
# Or if you use python 2:
# from StringIO import StringIO as BytesIO
from PIL import Image
from django.core.files.base import ContentFile
wc = Image() # Create the image somehow
filename = 'filename.png' # Make a filename as well
in_memory_file = BytesIO()
wc.save(in_memory_file)
profile_image = ContentFile(in_memory_file.getvalue())
user.userprofile.tagcloud.save(name=filename, content=profile_image, save=False)
user.userprofile.save()
FieldFile.save(name,content,save = True)
需要两个必需的参数:
name
这是文件的名称,以及content
这是一个包含文件内容的对象。该 可选的save
参数控制模型实例是否为 在与此字段关联的文件被更改后保存。 默认为True
。请注意,
content
参数应该是一个实例django.core.files.File
,而不是Python的内置文件对象。