Python “Django错误”';ImageFieldFile';对象没有属性';更换'&引用;

Python “Django错误”';ImageFieldFile';对象没有属性';更换'&引用;,python,django,imagefield,Python,Django,Imagefield,错误消息是: AttributeError at /projects/ 'ImageFieldFile' object has no attribute 'replace' Request Method: GET Request URL: http://localhost:8000/projects/ Django Version: 2.2.5 Exception Type: AttributeError Exception Value: 'Image

错误消息是:

AttributeError at /projects/

'ImageFieldFile' object has no attribute 'replace'

Request Method:     GET
Request URL:    http://localhost:8000/projects/
Django Version:     2.2.5
Exception Type:     AttributeError
Exception Value:    

'ImageFieldFile' object has no attribute 'replace'

Exception Location:     .../js-portfolio/venv/lib/python3.6/site-packages/django/utils/encoding.py in filepath_to_uri, line 252
Python Executable:  .../js-portfolio/venv/bin/python
Python Version:     3.6.8
Python Path:    

['.../js-portfolio',
 '/usr/lib/python36.zip',
 '/usr/lib/python3.6',
 '/usr/lib/python3.6/lib-dynload',
 '.../js-portfolio/venv/lib/python3.6/site-packages']
我有一个拍摄图像的项目模型。我将模型添加到我的管理页面,我从管理创建了一个对象,可以添加一个图像,没有问题。当我试图显示我的视图时,问题就出现了。我甚至没有引用base.html中的图像

我的项目模型(models.py):

from django.db import models

class Project(models.Model):
    title = models.CharField(max_length=100)
    description = models.TextField()
    technology = models.CharField(max_length=20)
    image = models.ImageField(default='default.jpg', upload_to='img')

def __str__(self):
    return self.title
我的设置.py

STATIC_URL = '/static/'

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">

<nav class="navbar navbar-expand-lg navbar-light bg-light">
    <div class="container">
        <a class="navbar-brand" href="{% url 'project_index' %}">JS Portfolio</a>
        <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
          <span class="navbar-toggler-icon"></span>
        </button>

        <div class="collapse navbar-collapse" id="navbarSupportedContent">
          <ul class="navbar-nav mr-auto">
            <li class="nav-item active">
              <a class="nav-link" href="{% url 'project_index' %}">Home</a>
            </li>
            <li class="nav-item">
              <a class="nav-link" href="#">Blog</a>
            </li>
          </ul>
        </div>
    </div>

</nav>

<div class="container">
    {% block page_content %}{% endblock %}
</div>

<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>

return staticfiles_storage.url(path)

     …

▶ Local vars
.../js-portfolio/venv/lib/python3.6/site-packages/django/core/files/storage.py in url
  url = filepath_to_uri(name)

     …

▶ Local vars
.../js-portfolio/venv/lib/python3.6/site-packages/django/utils/encoding.py in filepath_to_uri

return quote(path.replace("\\", "/"), safe="/~!*()'")

base.html

STATIC_URL = '/static/'

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">

<nav class="navbar navbar-expand-lg navbar-light bg-light">
    <div class="container">
        <a class="navbar-brand" href="{% url 'project_index' %}">JS Portfolio</a>
        <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
          <span class="navbar-toggler-icon"></span>
        </button>

        <div class="collapse navbar-collapse" id="navbarSupportedContent">
          <ul class="navbar-nav mr-auto">
            <li class="nav-item active">
              <a class="nav-link" href="{% url 'project_index' %}">Home</a>
            </li>
            <li class="nav-item">
              <a class="nav-link" href="#">Blog</a>
            </li>
          </ul>
        </div>
    </div>

</nav>

<div class="container">
    {% block page_content %}{% endblock %}
</div>

<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>

return staticfiles_storage.url(path)

     …

▶ Local vars
.../js-portfolio/venv/lib/python3.6/site-packages/django/core/files/storage.py in url
  url = filepath_to_uri(name)

     …

▶ Local vars
.../js-portfolio/venv/lib/python3.6/site-packages/django/utils/encoding.py in filepath_to_uri

return quote(path.replace("\\", "/"), safe="/~!*()'")

My views.py:

from django.shortcuts import render
from projects.models import Project

def project_index(request):
    projects = Project.objects.all()
    context = {
        'projects': projects
    }
    return render(request, 'project_index.html', context)

def project_detail(request, pk):
    project = Project.objects.get(pk=pk)
    context = {
        'project': project
    }
    return render(request, 'project_detail.html', context)
project_index.html的模板:

{% extends "base.html" %}
{% block page_content %}

<h1>Projects</h1>

<div class="row">

{% for project in projects %}

    <div class="col-md-4">

        <div class="card mb-2">

            <!--<img class="card-img-top" src="{% static project.image %}"> {{ project.image.url }}  -->
            <img class="card-image" src="{{ project.image.url }}">

            <div class="card-body">

                <h5 class="card-title">{{ project.title }}</h5>

                <p class="card-text">{{ project.description }}</p>

                <a href="{% url 'project_detail' project.pk %}"

                   class="btn btn-primary">

                    Read More

                </a>

            </div>

        </div>

    </div>

    {% endfor %}

</div>

{% endblock %}
{%extends“base.html”%}
{%block page_content%}
项目
{项目%中的项目为%}
{{project.title}

{{project.description}

{%endfor%} {%endblock%}
您不应该将图像传递给静态标记

src="{% static project.image %}"
您应该使用
url
方法获取图像的url

src="{{ project.image.url }}"

即使您已注释掉模板中的元素,但由于未使用Django模板注释,标记仍在呈现中

您是否可以共享
/projects/
url的视图和模板?看起来您希望执行字符串操作。可能你想对
ImageField.path执行操作,而不是
ImageField
@IainShelvington好的,我用这些信息编辑了我的文章。请看一看。谢谢@纳格什哈帕迪我不太明白你的意思。如果可以,请解释一下,我是新手。谢谢谢谢!成功了。我简直不敢相信我花了5个小时来研究这么简单的解决方案。我不知道评论仍然会被呈现。