Django图像(媒体)路径无法在模板中正确显示

时间:2017-03-03 09:46:09

标签: python django django-models django-templates imagefield

在我的项目中,我设置了这样的媒体文件夹:

settings.py

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

urls.py

urlpatterns = [
    ....
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

然后在我的models.py中创建一个类似这样的类:

class PD_Pictures(models.Model):
    pic_IDmod = models.ForeignKey(PD_Models, related_name='modello')
    pic_image = models.ImageField()
    pic_descr = models.CharField(max_length=50)

 def __str__(self):
    return self.pic_descr

此时我在views.py中的函数中提取了与PD_Picture相关的db中的所有值:

prod_img = PD_Pictures.objects.all()
.....
return render(
    request,
    'base_catalog.html',
    {
        'bike_mod': bike_models,
        'prod_img': prod_img,
        'cat_list': cat_list,
        'menu_list': menu_list['menu'],
        'pcontent': menu_list['cont'],
        'form': c_form
    },
    context
)

在我的模板中,我会显示相关的图像:

{% for pic in prod_img %}
    <div class="4u">
        <span class="image fit"
            <img src="{{ pic.pic_image }}" alt="" />
        </span>
    </div>
{% endfor %}

好吧,此时我在db中插入一个新图像,在表中路径为newimage.jpg,物理上在我的服务器上,图像存储在/media/newimage.jpg中,如何从中提取值表并连接到我的模板中的媒体路径? (<server>/media/newimage.jpg

我尝试在upload_to='/models/'中使用ImageField,但唯一的效果是将图像保存到另一个模型文件夹中的主模型中。

3 个答案:

答案 0 :(得分:2)

试试这个

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.js"></script> <div class="slideOne"><button>Click Here</button> <div class="slideChild">A</div> <div class="slideChild">B</div> <div class="slideChild">C</div> <div class="slideChild">D</div> </div> <div class="some content">ABC</div> <div class="slide"><button>Click Here</button> <div class="slideChild" id="a">E</div> <div class="slideChild">F</div> <div class="slideChild">G</div> <div class="slideChild">H</div> </div> <script> $(document).on("click","button",function(){ var parendDIv=$(this).parent('div').attr('class'); $("."+parendDIv+">.slideChild").toggle(); }); </script>

答案 1 :(得分:0)

您可以将其添加到模板中并查看给出的路径吗?

{% for pic in prod_img %}
  <p>{{ pic.pic_image }</p>
{% endfor %}

答案 2 :(得分:0)

来自django官方文件:

  

FieldFile.url   一个只读属性,用于通过调用底层Storage类的url()方法来访问文件的相对URL。

如果您尝试在模板中打印{{pic.pic_image}},您将收到db字段值,而使用来自django.core的{{pic.pic_image.url}} url()方法。 files.storage.Storage将调用,以及您的基本设置 似乎是正确的