Python 使用Windows时,图像不会显示在Django模板中

Python 使用Windows时,图像不会显示在Django模板中,python,django,windows,imagefield,Python,Django,Windows,Imagefield,我正在通过开发一个博客来学习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/'

我正在通过开发一个博客来学习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', 
    )
    # 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_根、MEDIA_URL、STATIC_根和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 %}
我还有很多其他的代码没有发布。我有上传图片的表格。图像已成功上载,并可在子目录media_file/blog中找到。当我尝试列出带有的图像时,它会显示到该图像的断开链接。因此,我在views.py中使用print try_image.image.url打印出url,以发现该url与主目录blog/IMG.jpg有关。因此,我添加了MEDIA_根目录,发现我现在得到了完整的目录路径C:/django/third_blog/zblog/MEDIA_files/blog/IMG.jpg

我将变量MEDIA_ROOT传递给模板,并将模板更改为

    <img src = "{{ image_root }}{{ blog.item.url }}">
最后一个zblog目录中的My 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_文件、static和zblog目录。但它仍然不起作用

此外,即使我将图像硬编码到HTML中:

    <img src = "C:\django\third_blog\zblog\media_files\blog\IMG_20141125_104718.jpg" height=100> </br>

它仍然没有显示图像。它给了我一个空格。

您想使用来自的路径吗

BASE_DIR=os.path.dirnameos.path.dirnamefile

为文件构建路径。 i、 e

在settings.py中 模板目录= os.path.joinBASE_DIR,“模板”, STATIC\u ROOT=os.path.joinBASE\u DIR,“STATIC”,“STATIC\u ROOT” 静态文件\u目录= os.path.joinBASE_DIR、'static'、'static_dirs', MEDIA\u ROOT=os.path.joinBASE\u DIR,'static','MEDIA', 媒体URL='/MEDIA/'
.join正确连接它们。

仍不工作。我在问题中将更改作为编辑。您根本不需要修改manage.py。在模板顶部附近需要{%load staticfiles%},获取图像的格式为{%static blog\IMG_20141125_104718.jpg%},谢谢。是的,我不需要改变manage.py。您为settings.py发布的更改非常方便。但是MEDIA_ROOT必须指向os.path.joinBASE_DIR,“MEDIA_files”和MEDIA_URL必须是“/MEDIA/”。主要错误在于媒体URL。再次感谢您的帮助。这些示例展示了如何使用os.path BASE_DIR设置您的。我想你应该知道相应地更新名称。你的媒体URL应该是“/MEDIA/”,就像你的静态URL是“/STATIC/”,谢谢!这就是错误所在。
    <img src = "C:\django\third_blog\zblog\media_files\blog\IMG_20141125_104718.jpg" height=100> </br>