简体   繁体   English

如何访问通过Django中的表单集上传的图像?

[英]How do I access images uploaded through a formset in Django?

I cannot seem to find a way to iterate through the files uploaded by the formset, although the files are uploaded as the code indicates. 我似乎找不到一种方法来遍历表单集上载的文件,尽管文件已按照代码指示进行了上载。

When I load the page it shows 1-3 "img src=(unkown)" tags. 当我加载页面时,它显示1-3个“ img src =(unkown)”标签。 It shows 3 when I upload 2 images and 1 when I upload 1 image. 上传2张图片时显示3,上传1张图片时显示1。

Template view-post: 模板视图:

{% block body %}
<div class="container">
<div class="col-md-8">
    <p>
        <h1>{{ post.title }}</h1>
        <h4>{{ post.body }}</h4>
        <p>
            Posted by {{ post.user }} on {{ post.created_date }}
            {% if not post.created_date == post.updated_date %}
            and updated on {{ post.updated_date }}
            {% endif %}
        </p>
    </p>
    {% for img in images %}
    <img src="{{ img.url }}" width=360>
    {{ img.url }}
    <br>
    {% endfor %}
</div>
<div class="col-4-md">
    {% if post.cover_image %}
    <img src="{{ post.cover_image.url }}" width=240>
    {% endif %}
</div>
</div>
{% endblock %}

Here I use filter, not get, so it should give me a list of the images connected via foreignkey to the right post. 在这里,我使用过滤器而不是获取,因此它应该给我列出通过Foreignkey连接到正确帖子的图像列表。 The post here is displayed as it should be, along with the internal cover image and text in the post. 此处的帖子将按原样显示,并附带帖子中的内部封面图像和文字。

View view-post: 查看观点:

class ViewPost(TemplateView):
    template_name = 'posts/view_post.html'
    context_object_name = 'view_post'

def get(self, request, pk):
    post = Post.objects.get(pk=pk)
    images = Images.objects.filter(post=post)
    args = {'post': post, 'images': images}
    return render(request, self.template_name, args)

Template make-post: 模板制作:

{% block body %}
<div class="container">
<div class="col-md-8">
    <form method="post" enctype="multipart/form-data">
        {% csrf_token %}
        {{ form.as_p }}
        {{ form.errors }}
        {% csrf_token %}
        {{ formset.management_form }}
        {% for form in formset %}
            {{ form }}
        {% endfor %}
    <button type="submit">Submit</button>
    </form>
</div>
</div>
{% endblock %}

View make-post: 查看制作发布:

class MakePost(DetailView):

    template_name = 'posts/make_post.html'
    ImageFormSet = modelformset_factory(Images, form=ImageForm, extra=3)

def get(self, request):
    form = PostForm()
    formset = self.ImageFormSet(queryset=Images.objects.none())
    args = {'form': form, 'formset': formset}
    return render(request, self.template_name, args)

def post(self, request):
    form = PostForm(request.POST, request.FILES)
    formset = self.ImageFormSet(request.POST, request.FILES,
                           queryset=Images.objects.none())
    if form.is_valid() and formset.is_valid():
        post = form.save(commit=False)
        post.user = request.user
        post.cover_image = form.cleaned_data['cover_image']
        post.title = form.cleaned_data['title']
        post.body = form.cleaned_data['body']
        post.save()

        for imgform in formset:
            image = imgform.cleaned_data.get('image')
            photo = Images(post=post, post_image=image)
            photo.save()
        return redirect('home_space:home')
    else:
        return redirect('home_space:home')

Function to name files and image Model: 命名文件和图像模型的功能:

def get_image_filename(instance, filename):
    title = instance.post.title
    slug = slugify(title)
    return "post_images/%s-%s" % (slug, filename)

class Images(models.Model):
    post = models.ForeignKey(Post, default=None, on_delete=models.CASCADE)
    post_image = models.ImageField(upload_to=get_image_filename,
                          verbose_name='Image')

In your template, you are accessing url of Images model instance. 在您的模板中,您正在访问Images模型实例的url But, the url property is in ImageField class instance. 但是, url属性位于ImageField类实例中。 Use img.post_image.url . 使用img.post_image.url

Example : 范例

{% for img in images %}
    <img src="{{ img.post_image.url }}" width=360>
    {{ img.post_image.url }}
    <br>
{% endfor %}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Django:用于为上传的图像添加字幕的Formset - Django: Formset for adding captions to uploaded images 如何使用 django 将图像作为 BLOB 直接保存到 MySQL 数据库中? 这些图像是通过 django 管理面板动态上传的? - How do I save images directly into a MySQL database as a BLOB using django? These images are uploaded dynamically through the django admin panel? 如何让表单集继承表单的样式? 我的意思是,如何在 Django 中设置表单集的样式? - How do I make the formset inherit the styles of the form? I mean, how do I style the formset in Django? 如何从 django 中的表单集计算 javascript? - How do I do calculations in javascript from my formset in django? 如何使用内联表单集通过 CreateView 上传文件? - How do I upload files through a CreateView using an inline formset? 如何使用 django formset_factories? - How do I use django formset_factories? 如何在Django的formset中向表单添加纯文本信息? - How do I add plain text info to forms in a formset in Django? 如何在Django表单集中更改DELETE字段的窗口小部件类型 - How do I change the widget type of the DELETE field in a django formset 如何重命名我通过 Django Rest Framework 上传的图像 - How do I rename image that I uploaded through Django Rest Framework Django:保存通过ImageField上传的图像 - Django: Saving images uploaded through ImageField
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM