首页 > 解决方案 > django中的图片上传问题

问题描述

我已经上传了图片,但它没有显示在页面中。上传的图像也没有显示在媒体文件夹中。使用 django 表单上传图片。看看我的代码片段:

我的models.py

class Post(models.Model):
    author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    title = models.CharField(max_length=200)
    text = models.TextField()
    published_date = models.DateTimeField(blank=True, null=True)
    blog_img = models.ImageField(upload_to='images/',null=True, blank=True)
    @property
    def img(self):
        if self.blog_img and hasattr(self.blog_img, 'url'):
            return self.blog_img.url
        else:
            return "#"

我的views.py

 def post_new(request):
     if request.method =="POST":
         form = PostForm(request.POST , request.FILES)
         if form.is_valid():
             post = form.save(commit=False)
             post.author= request.user
             post.save()
             return redirect('post_detail',pk=post.pk)
         else:
             form=PostForm()
         return render(request, 'blog/post_edit.html',{'form':form})



def post_edit(request, pk):
    post = get_object_or_404(Post, pk=pk)
    if request.method == "POST":
        form = PostForm(request.POST, request.FILES, instance=post)
        if form.is_valid():
            post = form.save(commit=False)
            post.author = request.user
            post.save()
            return redirect('post_detail', pk=post.pk)
    else:
        form = PostForm(instance=post)
    return render(request, 'blog/post_edit.html', {'form': form})

我在settings.py中添加了这个:

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

我的 post_list.html:

{% extends 'blog/base.html' %}
{% block content %}
   <div class="h2">
   <h2>Recent Posts</h2>
   </div>

   {% for post in posts %}
     <div class="">
        <div class="post">

            <h2><a href="{% url 'post_detail' pk=post.pk %}">{{ post.title }}</a></h2>

           <a href="{% url 'post_detail' pk=post.pk %}">Comments: {{ post.approved_comments.count }}</a>
             <img src=" {{ post.img }} " width="200px" alt="images">
            <p>{{ post.text|linebreaksbr }}</p>
            <div class="date">
                <p>published: {{ post.published_date }}</p>

            </div>
        </div>
      </div>
    {% endfor %}
{% endblock %}

此处使用了用于从用户 django 表单获取输入的表单模板。 post_edit.html

{% extends 'blog/base.html' %}
{%block content%}
<h2>New post</h2>
    <form method="POST" class="post-form">{% csrf_token %}
        {{ form.as_p }}
        <button type="submit" class="save btn btn-default">Save</button>
    </form>
{%endblock%}

标签: pythondjangofile-upload

解决方案


推荐阅读