我正在通过开发博客来学习Django。我的代码在Linux和Windows上都有效。最近,我开始使用ImageField向我的模型添加图像,它可以在Linux中运行,但我无法在Windows中使用它。我正在使用独立服务器。 这是我的settings.py文件:
MEDIA_ROOT = 'C:/django/third_blog/zblog/media_files/'
MEDIA_URL = 'C:/django/third_blog/zblog/media_files/'
STATIC_ROOT = 'C:/django/third_blog/zblog/static'
STATIC_URL = '/static/'
STATICFILES_DIRS = (
'C:/django/third_blog/zblog/media_files/',
)
TEMPLATE_DIRS = (
'C:/django/third_blog/zblog/templates',
)
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
# Uncomment the next line to enable the admin:
'django.contrib.admin',
'blog',
)
我摆弄了MEDIA_ROOT,MEDIA_URL,STATIC_ROOT和STATIC URL,以使代码在Linux中运行。我用pip在windows中安装了pillow-2.8.1。
这是我在模板目录中的html文件:
{% load staticfiles %}
<a href = "/">Back to homepage </a>
{% if list_of_blog_entries %}
<ol>
{% for blog_entry in list_of_blog_entries %}
<li> {% for blog_item in blog_entry %}
{% if blog_item.image %}
<img src = "{{ blog.item.url }}" height=100> </br>
{% endif %}
{% endfor %} </li> </br> </br>
{% endfor %}
</ol>
{% else %}
<p> Blog is empty </p>
{% endif %}
这是我的views.py文件:
# other imports
import zblog.settings as settings_file
#from PIL import *
import PIL
def list_posts(request):
"""
Lists the posts with their contents on a single page.
"""
###
# I stands for image or photo.
if post_item == "I":
items_in_post.append(post.postimage_set.get(image_id=post_item_id))
try_image=post.postimage_set.get(image_id=post_item_id)
print try_image.image.url
print settings_file.MEDIA_ROOT+try_image.image.url
print try_image.image
print
print
image_counter += 1
list_of_blog_entries.append(items_in_post)
return render_to_response("blog/list_posts.html", \
{'list_of_blog_entries' : list_of_blog_entries, \
'image_root':settings_file.MEDIA_URL})
我还有很多其他未发布的代码。我有上传图片的表格。图像已成功上载,可在子目录media_file / blog中找到。当我尝试列出图像时,它会显示图像的断开链接。所以我用&#34打印了网址:print try_image.image.url&#34;在views.py中找到该url是关于主目录&#34; blog / IMG.jpg&#34;。所以我添加了MEDIA_ROOT并发现我现在获得了完整的目录路径&#34; C:/django/third_blog/zblog/media_files/blog/IMG.jpg"。
我将变量MEDIA_ROOT传递给模板并将模板更改为
<img src = "{{ image_root }}{{ blog.item.url }}">
现在我得到一张空白的图片应该是的空间。花了几个小时的谷歌搜索,找到了我第一次用它来实现Linux的链接。 Windows有什么特定的东西吗?我正在使用Django 1.7和Python 2.7.3。
提前致谢。
************* EDIT ********* 我的目录结构是:
C:
django
thrid_blog
zblog
blog
media_files
static
zblog
manage.py
我在上一个zblog目录中的settings.py文件。所以,我说:
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
在我的manage.py文件和settings.py文件中,我把
import sys
sys.path.append("c:\django\third_blog\zblog")
from manage import BASE_DIR
获取指向项目主目录的BASE_DIR,其中包含目录blog,media_files,static,zblog。但它仍然无法发挥作用。
此外,即使我将图像硬编码到HTML中:
<img src = "C:\django\third_blog\zblog\media_files\blog\IMG_20141125_104718.jpg" height=100> </br>
它仍然没有显示图像。它给了我一个空白。
答案 0 :(得分:0)
您想使用
中的路径BASE_DIR = os.path.dirname(os.path.dirname( file ))
构建文件的路径。 即。
# in settings.py
TEMPLATE_DIRS = (
os.path.join(BASE_DIR, 'templates'),
)
STATIC_ROOT = os.path.join(BASE_DIR, 'static', 'static_root')
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static', 'static_dirs'),
)
MEDIA_ROOT = os.path.join(BASE_DIR, 'static', 'media'),
MEDIA_URL = '/media/'
.join正确连接它们。