Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django-媒体URL中的图像未显示在模板上?_Python_Django_Django Templates_Media_Django Settings - Fatal编程技术网

Python Django-媒体URL中的图像未显示在模板上?

Python Django-媒体URL中的图像未显示在模板上?,python,django,django-templates,media,django-settings,Python,Django,Django Templates,Media,Django Settings,所以我已经读了很多关于这个问题的堆栈溢出的答案,但是没有一个能解决我的问题。我已经设置了媒体根目录、媒体URL、静态根目录和静态URL,但由于某些原因,媒体URL中的图像没有显示在模板上,而静态URL中的图像则显示在模板上 下面是我的代码以及进一步的解释 设置.py STATICFILES_DIRS = ( ('/static/', '/home/joe/Documents/exchange/Texchange/textchange/static',), ('/media

所以我已经读了很多关于这个问题的堆栈溢出的答案,但是没有一个能解决我的问题。我已经设置了媒体根目录、媒体URL、静态根目录和静态URL,但由于某些原因,媒体URL中的图像没有显示在模板上,而静态URL中的图像则显示在模板上

下面是我的代码以及进一步的解释

设置.py

STATICFILES_DIRS = (
    ('/static/',
    '/home/joe/Documents/exchange/Texchange/textchange/static',),
    ('/media/',
    '/home/joe/Documents/exchange/Texchange/textchange/media/',),
)

MEDIA_ROOT = '/home/joe/Documents/exchange/Texchange/textchange/media/'

MEDIA_URL = '/media/'

STATIC_ROOT = '/home/joe/Documents/exchange/Texchange/textchange/'

STATIC_URL = '/static/'
Models.py

class Posting(models.Model):
    textbook = models.ForeignKey(Textbook)
    condition = models.CharField(max_length = 200)
    price = models.DecimalField(max_digits=5, decimal_places=2)
    user = models.ForeignKey(User)
    image = models.ImageField(upload_to='postingpics/%Y/%m/%d', default="../../static/textchange/nophoto.jpg")
    post_date = models.DateTimeField('date_posted')

    def __str__(self):
        return str(self.textbook)

    def was_posted_recently(self):
        return self.post_date >= timezone.now() - datetime.timedelta(days=1)
    was_posted_recently.admin_order_field = 'post_date'
    was_posted_recently.boolean = True
    was_posted_recently.short_description = 'Posted recently'
Template.html

<div class="row marketing">
      <div class="col-lg-6">
        <h3>Textbook Info</h3>
          <p><strong>Textbook: </strong>{{ posting.textbook.textbook_name }}</p>
          <p><strong>Condition: </strong>{{ posting.condition }}</p>
          <p><strong>Price: </strong>{{ posting.price }}</p>
          <p><strong>Class: </strong>{{ posting.textbook.class_name }}</p>
          <p><strong>ISBN: </strong>{{ posting.textbook.isbn }}</p>
          <p><strong>Author: </strong>{{ posting.textbook.author }}</p>
        <h3>Contact Info</h3>
          <p><strong>User: </strong>{{ posting.user.username }}</p>
          <p>Button to contact</p>


      </div>

      <div class="col-lg-6">
        {% block content %}
          <img src="{{ posting.image.url }}">
          <p>{{ posting.image.url }}</p>
        {% endblock %}
      </div>
    </div>

教科书信息
教科书:{{posting.textube.textube\u name}

条件:{{posting.Condition}

价格:{{posting.Price}

类:{{posting.textube.Class_name}

ISBN:{{posting.textube.ISBN}

作者:{{posting.textube.Author}

联系方式 用户:{{posting.User.username}

联系按钮

{%block content%} {{posting.image.url}

{%endblock%}
所以你可以看到,如果我没有上传一张用于发帖的图片,它会变成一张默认的图片,存储在static/textchange中。此图像将显示在模板上。如果我上传了一个图像,该图像将不会显示在模板上。在我的template.html中,我在段落标记中有文本{{posting.image.url}},以查看不同图像的url是什么样子

使用static/textchange中的默认图像时,url为:/../static/textchange/nophoto.jpg,图像显示良好

当我尝试在模板中显示上传的图像时,url为:/media/postingpics/2015/09/20/Star-Wars-Sith-Code-wallper-2_dlPszgQ.jpg,没有图像显示

我觉得静态图像在静态文件夹前面有//很奇怪,但我不知道为什么只有静态文件夹中的图像才会出现这种情况


任何帮助都将不胜感激。

Django不会自动提供媒体URL,您必须手动设置

此外,静态文件和媒体文件的设置也很奇怪:

  • 您的媒体根目录位于静态根目录内。为什么?
  • 静态文件目录在静态根目录中。这真的没有任何意义。静态文件\u dir应该被收集到您的静态根目录中
  • 您的媒体根目录在STATICFILES\u目录中设置为静态文件目录。根据定义,媒体文件不是静态文件。去掉这个
看起来你想要的东西更像这样:

STATICFILES_DIRS = (
    '/home/joe/Documents/exchange/Texchange/textchange/static',
)

MEDIA_ROOT = '/home/joe/Documents/exchange/Texchange/textchange/media/'

MEDIA_URL = '/media/'

STATIC_ROOT = '/home/joe/Documents/exchange/Texchange/textchange/static_root/'

STATIC_URL = '/static/'

假设
Texchange/textchange
是您的项目根。

我的应用程序文件夹中有一个媒体文件夹和一个静态文件夹。但是如果我把static放在static\u ROOT的末尾,我的css文件就停止加载了……我像你说的那样提供了媒体文件,它可以工作:)static\u ROOT在开发中并没有真正使用,文件夹必须存在(如果我没记错的话)。只要
static
文件夹位于上面的STATICFILES\u目录中,它就会被服务。谢谢,静态文件有点让人困惑,但我正在慢慢了解它们。