【问题标题】:Want to display an image想要显示图像
【发布时间】:2011-10-10 07:14:01
【问题描述】:

我有一个小问题。我想要一个可以上传和显示图像的 django 应用程序。目前,它可以上传图像,但我无法显示该图像。

例如,{{comment.photo}} 将打印出路径 C:/Users/AQUIL/Desktop/myproject/images/P1000992.JPG。但我想在屏幕上看到那个图像。不是路径。如何将图像打印到屏幕上?

这里有一些信息可能会有所帮助。

models.py

class Comment(models.Model):
    name = models.CharField(max_length = 40)
    datetime = models.DateTimeField(default=datetime.now)
    photo = models.ImageField(upload_to='C:/Users/AQUIL/Desktop/myproject/media/images', blank=True, null=True)
    note = models.TextField()
    def __unicode__(self):
        return unicode(self.name)

views.py

def home(request):
    comments = None
    try:
        comments = Comment.objects.order_by('-datetime')
    except:
        return HttpResponseNotFound()
    return render_to_response('home.html', {'comments':comments}, context_instance=RequestContext(request)) 


def add_notes(request):
    comments = Comment.objects.all()
    if request.method == 'POST':
        form = CommentForm(request.POST or None, request.FILES)
        if form.is_valid():
            comments.datetime = datetime.now()
            form.save(True)
            return HttpResponseRedirect(reverse(home))
    else:
        form = CommentForm()
    return render_to_response('form.html', {'form':form,'comments':comments}, context_instance = RequestContext(request))

home.html

    {% extends "base.html" %}

    {% block content %}

    <H2>List of Comments</H2>
    <div style="overflow:auto;padding: 10px; border:1px solid black; height:150px; width:700px;">

        {% for comment in comments %}
            {{comment.photo}} <br/>
            <b>Posted by: {{ comment.name }} Date: {{ comment.datetime.date }} Time: {{comment.datetime.time}}</b><br/>
            <div style="font-size:125%">{{ comment.note }}</div><br/>   
        {% endfor %}
        </div>
    {% endblock %}

form.html

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

<h3>Add Notes</h3>  
    <form enctype="multipart/form-data" action=""  method="POST">

{% csrf_token %}
        <table>
        {{form.as_table}}
<br/>
        </table>

    <input type="submit" value="Save" STYLE="background-color:#E8E8E8; color:#181818 "/>
    </form>


{% endblock %}

【问题讨论】:

  • 请停止在标题中写标签。

标签: python mysql sql database django


【解决方案1】:

而不是{{comment.photo}}

使用{{comment.photo.url}}

查看docs中的示例

【讨论】:

    【解决方案2】:
    {% if comment.photo %} <img src="{{ comment.photo.url }}" alt="Photo" /> {% endif %}
    

    有关如何正确上传图片,请参阅 Geoffrey 的评论。

    【讨论】:

    • 我收到此错误Caught ValueError while rendering: The 'photo' attribute has no file associated with it。有错误正在谈论的照片属性在{{comment.photo.url}}
    • 把它放进去,如果例如 {% if comment.photo %} {{comment.photo.url}} {% endif %}
    • 你没有上传一些cmets的照片吗?
    • 我现在不太确定出了什么问题。 @JamesO 如果我按照你说的做,它不会打印出图像,我猜这意味着它找不到图像。它打印img src="/media/C%3A/Users/AQUIL/Desktop/myproject/media/images/P1010088.JPG" alt="Photo" /&gt; 现在我上传的图像存储在/myproject/media/images/ 中。我想知道它是否找不到这些图像。
    • 在您的模型中 upload_to 也应该与您的 media_root/url 相关 - 尝试将其从 'C:/Users/AQUIL/Desktop/myproject/media/images' 更改为 'images'
    【解决方案3】:

    ImageField的上传参数必须是本地路径,所以替换:

    photo = models.ImageField(upload_to='C:/Users/AQUIL/Desktop/myproject/media/images', blank=True, null=True)
    

    作者:

    photo = models.ImageField(upload_to='images', blank=True, null=True)
    

    然后将settings.py中的MEDIA_ROOT设置为:

    MEDIA_ROOT = 'C:/Users/AQUIL/Desktop/myproject/media/'
    

    最后,您的图片“myImage.png”可以在以下位置访问:

    C:/Users/AQUIL/Desktop/myproject/media/images/myImage.png
    

    这个标签应该加载图片:

    <img src="/media/images/myImage.png" alt=""/>
    

    取决于你在 settings.py 中的 MEDIA_URL 应该是:

    MEDIA_URL = '/media/'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-22
      相关资源
      最近更新 更多