2015-04-06 2 views
0

Я изучаю 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> 

Он по-прежнему не показывает изображение. Это дает мне пробел.

+0

Ваш MEDIA_URL должен быть просто '/ media /', как ваш STATIC_URL просто '/ static /' –

+0

Спасибо! Это была ошибка. –

ответ

0

Вы хотите использовать путь от

base_dir = os.path.dirname (os.path.dirname (файл))

строить свои пути для файлов. Т.е.

# 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 объединяет их должным образом.

+0

Все еще не работает. Я внес изменения в качестве редактирования в свой вопрос. –

+0

Вам совсем не нужно изменять manage.py. в вашем шаблоне вам нужно {% load staticfiles%} в верхней части, а формат для получения изображения будет «{% static» blog \ IMG_20141125_104718.jpg "%} ' –

+0

Спасибо. Да, мне не пришлось менять manage.py. Изменения, которые вы опубликовали для settings.py, удобны. Но MEDIA_ROOT должен указывать на os.path.join (BASE_DIR, 'media_files'), а MEDIA_URL должен быть '/ media /'. Основная ошибка была в MEDIA_URL. В очередной раз благодарим за помощь. –

Смежные вопросы