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

2024-05-12 19:45:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在通过建立一个博客来学习Django。我的代码可以在Linux和Windows下运行。最近,我开始用ImageField在我的模型中添加图像,它可以在Linux下运行,但在Windows下却无法运行。我使用的是独立服务器。 这是我的设置.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', 
    )

为了让代码在Linux下工作,我修改了MEDIA_ROOT、MEDIA_URL、STATIC_ROOT和STATIC URL。我用pip在windows中安装了pip-2.8.1。在

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

^{pr2}$

这是我的视图.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中找到。当我试图用列出图像时,它显示了到该图像的断开链接。所以我把网址打印出来_图像.image.url“在视图.py找到网址是关于主目录的博客/图像.jpg". 所以我添加了MEDIA_根目录,发现我现在得到了完整的目录路径“C:/django/third_blog/zblog/MEDIA_files/blog”/图像.jpg". 在

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

    <img src = "{{ image_root }}{{ blog.item.url }}">

现在我得到了一个空白,图像应该在那里。在过去的一个小时里,我在google上找到了我第一次在Linux下运行的链接。有没有Windows特有的功能?我将django1.7与python2.7.3一起使用。在

提前谢谢。在

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

    C:
        django
            thrid_blog
                zblog
                    blog
                    media_files
                    static
                    zblog
                    manage.py

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

    BASE_DIR = os.path.dirname(os.path.abspath(__file__))

在我的管理.py文件和我的设置.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>

它仍然无法显示图像。它给了我一个空白。在


Tags: 文件djangopy图像imageurlblogroot
1条回答
网友
1楼 · 发布于 2024-05-12 19:45:51

您要使用的路径来自

基本方向=操作系统路径目录名(操作系统路径目录名(文件

为文件建立路径。 i、 e

# 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正确连接它们。在

相关问题 更多 >