【问题标题】:Display users' images in Django在 Django 中显示用户的图像
【发布时间】:2018-12-15 19:12:27
【问题描述】:

我正在学习 Django,目前正在尝试制作一个简单的网站,用户可以在其中发布主题和内容。我想要的只是打开主题时显示的属于某个主题的上传图片。但是我现在非常坚持,我无法在页面上显示任何图像。我尝试了很多不同的东西,但到目前为止都没有奏效。我无法理解模板应该是什么样子以及如何将其链接到主题页面......我的观点可能与正确的观点相去甚远,但我已经尝试了很多事情并且它都有一个有点乱......几乎已经有 2 天的麻烦了,我将不胜感激任何指示 提前谢谢你

这就是我所拥有的:

models.py

class Image(models.Model):
    """images representation"""
    image=models.ForeignKey(Topic, on_delete=models.CASCADE)
    image=models.ImageField(upload_to= 'media/')
    caption=models.CharField(max_length= 100)
    uploaded_at=models.DateTimeField(auto_now_add=True) 

views.py

def upload_image(request, topic_id):
    """Upload images"""
    topic=Topic.objects.get(id=topic_id)


    if request.method != 'POST':
        # No data submitted; creaete a blank form
        form=ImageForm()

    else:
        # Data submitted; Process data
        form=ImageForm(request.POST, request.FILES)
        if form.is_valid():
            instance=form.save(commit=FALSE)
            instance.topic=topic
            instance.save()
            return HttpResponseRedirect(reverse('the_horror:topic',
                                                args=[topic_id]))

    images=Image.objects.all()      
    context={'form':form, 'topic':topic, 'images':images}
    return render(request, 'the_horror/topic.html', context)

上传图片.html

{% extends 'the_horror/base.html' %}


{% block content %}

{% if images %}
	<ul>
	{% for image in images %}
		<li>
			<a href="{{image.image.url}}">
            <img source="{{image.image.url}}" alt="sth"></a>
		</li>
	{% endfor %}
	</ul>
{% else %}
	<p>No documents.</p>
{% endif %}


<form action="{% url 'upload_image' %}" method= "post" enctype= "multipart/form-data">
	{% csrf_token %}
    <input type="file" name="image"/>
    <input type="submit" name="submit" value="Upload"/>
    <button type="submit">name="upload photo"</button>
</form>

正如我所说,我不确定如何将图像传递给主题模板

topic.html

{% extends 'the_horror/base.html' %}

{% block content %}

<p>Topic:{{topic}}</p>
	<p>
		<a href="{% url 'the_horror:edit_topic' topic.id %)">edit topic</a>
	</p>
  
 
<p>Entries</p>
	<p>
		<a href="{% url 'the_horror:new_entry' topic.id %}">Add a new entry</a>
	</p>
<ul>
	{% for entry in entries %}
		<li>
			<p>{{entry.date_added|date:'M d, Y H:i' }}</p>
			<p>{{entry.text|linebreaks}}</p>
			<p>
				<image class= "Image" source={{>
			</p>
  
			<p>
				<a href="{% url 'the_horror:edit_entry' entry.id %}">edit entry</a>
			</p>
	   </li>
	{% empty %}
		<li> 
			There are no entries for this topic yet.
		</li>
	{% endfor %}
</ul>
 
{% endblock content %}

urls.py

path('upload_image/<topic_id>', views.upload_image, name= 'upload_image'),
# Single topic page

【问题讨论】:

    标签: django image file-upload


    【解决方案1】:

    在你的models.py上,你不需要在你的upload_to选项上写媒体,你要做的就是在你的urls.py中添加static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)这里

    urls.py

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

    在您的 upload_image.html 上,您为什么要创建 2 个输入。我个人使用输入来获取图像文件

    upload_image.html

    ...
    <input name="image" type="file">
    ...
    

    然后在你开始的视图中,但我会按照以下方式存储图像

    views.py

    def upload_image(request, topic_id):
        ...
        imageObject = Image.objects.create()
        image = request.FILES['image']
        imageObject.image = image
        ...
    

    最后,您将通过这种方式获得图像

    topic.html

    <img src="{{MEDIA_URL}}{{imageObject.image}}" alt="image">
    

    通常是可行的,我用这种方法或类似方法做了几个项目,如果你仍然有错误或问题,请告诉我

    【讨论】:

    • 为此干杯!是的,显然这是一种方法,我在“Django 相关对象等”中也看到了它,但不幸的是我仍然无法让它工作。我得到的只是图像应该显示的一个小“x”。而且我仍然认为我的整个“主题:图像”工作正常......但为了票价,我真的只想让一个图像开始显示。你认为'x'是关于什么以及在views.py中你向我展示的方式是什么?你把什么作为上下文?我的意思是...(主题:主题,图像:主题...)。干杯
    • 请确保您获得上述所有信息: 1 - 应用程序文件夹之外的媒体文件夹 2.1 - 在 settings.py 上确保将媒体文件夹的绝对路径放在名为类似的变量上这个MEDIA_ROOT = os.path.join(ENV_PATH, 'media/') 2.2 - 仍然在settings.py 上配置你的MEDIA_URL 如下MEDIA_URL = '/media' 这样做你通常可以存储和使用图像。就我个人而言,我只使用 locals() 而不是上下文,因为我一直想要视图中的所有数据如果它仍然不起作用请告诉我,我会尽力帮助你
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-04
    • 1970-01-01
    • 2016-05-04
    • 2015-04-15
    • 1970-01-01
    • 1970-01-01
    • 2011-03-17
    相关资源
    最近更新 更多