Я изучаю Django, создавая блог. Мой код работал как в Linux, так и в Windows. Недавно я начал добавлять изображения в свои модели с помощью ImageField, и он работает в Linux, но я не могу заставить его работать в Windows. Я использую автономный сервер. Вот мой settings.py файл:Изображения не отображаются в шаблоне Django при использовании Windows
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. Я установил подушку-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. Когда я пытаюсь перечислить изображение, он показывает неработающую ссылку на изображение. Поэтому я распечатал URL-адрес с «print try_image.image.url» в views.py, чтобы узнать, что URL-адрес относится к домашнему каталогу «blog/IMG.jpg». Поэтому я добавил MEDIA_ROOT и обнаружил, что теперь я получил полный путь к каталогу «C: /django/third_blog/zblog/media_files/blog/IMG.jpg».
я передал переменную MEDIA_ROOT в шаблон и изменить шаблон
<img src = "{{ image_root }}{{ blog.item.url }}">
Теперь я получаю пустое пространство, где изображение должно было быть. Провел прошлый час googling и нашел ссылки, которые я сначала использовал, чтобы получить это в Linux. Есть ли что-то особенное для Windows? Я использую Django 1.7 с Python 2.7.3.
Заранее спасибо.
************* EDIT ********* Моя структура каталогов:
C:
django
thrid_blog
zblog
blog
media_files
static
zblog
manage.py
Мой settings.py файл в последней zblog директории , Итак, я ставлю:
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 указывая на домашней директории проекта, который содержит каталоги блог, media_files, static, zblog. Но это все еще не работает.
Кроме того, даже когда я жёстко изображение в HTML:
<img src = "C:\django\third_blog\zblog\media_files\blog\IMG_20141125_104718.jpg" height=100> </br>
Он по-прежнему не показывает изображение. Это дает мне пробел.
Ваш MEDIA_URL должен быть просто '/ media /', как ваш STATIC_URL просто '/ static /' –
Спасибо! Это была ошибка. –