首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Windows时Django模板中未显示的图像

使用Windows时Django模板中未显示的图像
EN

Stack Overflow用户
提问于 2015-04-06 16:08:44
回答 1查看 1.6K关注 0票数 0

我正在通过开发一个博客来学习Django。我的代码在Linux和Windows中都可以使用。最近,我开始用ImageField将图片添加到我的模型中,它在Linux中工作,但我无法让它在Windows中工作。我正在使用一个独立的服务器。这是我的settings.py文件:

代码语言:javascript
复制
    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', 
    )

为了使代码在Linux中工作,我在MEDIA_ROOT、MEDIA_URL、STATIC_ROOT和静态URL中兜圈子。我用pip在窗口安装了枕头-2.8.1。

这是模板目录中的html文件:

代码语言:javascript
复制
    {% 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文件:

代码语言:javascript
复制
    # 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子目录中找到。当我试图列出图像时,它会显示到图像的断开链接。因此,我在views.py中打印了带有"print try_image.image.url“的url,发现url与主目录"blog/IMG.jpg”有关。因此,我添加了"C:/django/third_blog/zblog/media_files/blog/IMG.jpg".,并发现我现在得到了完整的目录路径MEDIA_ROOT。

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

代码语言:javascript
复制
    <img src = "{{ image_root }}{{ blog.item.url }}">

现在,我得到了一个空白,图像应该在那里。在过去的一个小时里,谷歌搜索并找到了我第一次用来在Linux中运行的链接。有什么是Windows特有的吗?我在Python2.7.3中使用Django 1.7。

提前谢谢。

*编辑*我的目录结构是:

代码语言:javascript
复制
    C:
        django
            thrid_blog
                zblog
                    blog
                    media_files
                    static
                    zblog
                    manage.py

我的settings.py文件位于最后一个zblog目录中。所以,我说:

代码语言:javascript
复制
    BASE_DIR = os.path.dirname(os.path.abspath(__file__))

在我的manage.py文件和settings.py文件中,我将

代码语言:javascript
复制
    import sys
    sys.path.append("c:\django\third_blog\zblog")
    from manage import BASE_DIR

要让BASE_DIR指向项目的主目录,其中包含博客、media_files、静态和zblog目录。但还是没用。

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

代码语言:javascript
复制
    <img src = "C:\django\third_blog\zblog\media_files\blog\IMG_20141125_104718.jpg" height=100> </br>

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

EN

回答 1

Stack Overflow用户

发布于 2015-04-06 17:00:13

您想要使用

os.path.dirname(os.path.dirname(file)) = BASE_DIR

为文件构建路径。即

代码语言:javascript
复制
# 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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29474935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档