我如何将 ModelForm 显示到 HTML 模板中?

How do i display a ModelForm into HTMLtemplate?

我有一个模板,我在其中显示了一个供用户上传图片的表单。在同一个模板中,我希望显示用户上传的图片,这样我就可以根据用户上传的图片制作图库。

问题是表单显示没有任何问题,但我很难显示上传的照片。 (它们也没有任何错误地上传到数据库。)

我的models.py看起来像这样

class categoria(models.Model):
    nombre = models.CharField(verbose_name = "nombre categoria", max_length = 20)
    def __str__(self):
        return self.nombre

class imagen(models.Model):
    titulo = models.CharField(verbose_name = "el titulo de la imagen", max_length = 20)
    imagen = models.ImageField(verbose_name = "imagen que se suba", upload_to = "galeria")
    descripcion = models.CharField(verbose_name = "descripcion de la imagen", max_length=60, null = 
    True, blank = True)
    creada = models.DateTimeField(auto_now_add=True)
    categorias = models.ManyToManyField(categoria)
    def __str__(self):
        return "El titulo es: {}, la imagen: {}, la descripcion: {}, ha sido creada en: {}, y 
        pertenece a las categorias: {}".format(self.titulo, self.imagen,
        self.descripcion, self.creada, self.categorias)

class formulario_img(ModelForm):
    class Meta:
        model = imagen
        fields = ['titulo', 'imagen', 'descripcion', 'categorias']

views.py 看起来像这样

from .models import formulario_img, imagenfrom
def imagenes_galeria(request): 
    imagenes = formulario_img.objects.all()
    return render(request, "galeria/galeria.html", {"imagenes":imagenes})


def galeria(request):
    if request.method == "POST":
        formulario_subir_foto = formulario_img(request.POST, request.FILES)
        if formulario_subir_foto.is_valid():
            formulario_subir_foto.save()
            return redirect("/galeria")
    else:
        formulario_subir_foto = formulario_img()

    return render(request, "galeria/galeria.html", 
    {"formulario_subir_foto":formulario_subir_foto})

我在这里尝试同时使用 formulario_img.objects.all() 和 imagen.objects.all() 并且 none 有效。

模板如下所示。正如我在上面所写的,上传图片的表单已显示并且运行良好。

{% extends "WebCalistenia/padre.html" %}
{% block content %}
    <section class="prueba">
        <table>
            <form action="" method="POST" enctype='multipart/form-data'>
                {% csrf_token %}
                {{formulario_subir_foto.as_table}}
                <input type="submit" value="Enviar">
            </form>
        </table>
    </section>
    {% for i in imagenes %}
        <section class="prueba">
            <p>{{i.titulo}}</p>
            <p>{{i.descripcion}}</p>
            <p>{{i.categorias}}</p> 
        </section>
    {% endfor %}
{% endblock %}
    

您没有将 imagenes 传递给您视图中的上下文 galeria。您有两个不同的视图呈现相同的模板,但每个都将不同的东西传递给上下文。这没有意义,因为模板需要上下文中的两个变量。只有一个视图并在上下文中传递两个变量:

def galeria(request):
    if request.method == "POST":
        formulario_subir_foto = formulario_img(request.POST, request.FILES)
        if formulario_subir_foto.is_valid():
            formulario_subir_foto.save()
            return redirect("/galeria")
    else:
        formulario_subir_foto = formulario_img()
    
    imagenes = formulario_img.objects.all()
    return render(request, "galeria/galeria.html", 
    {"formulario_subir_foto": formulario_subir_foto, "imagenes": imagenes})

注意:删除您可能已添加到其他视图的任何 url 模式。