我如何将 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 模式。
我有一个模板,我在其中显示了一个供用户上传图片的表单。在同一个模板中,我希望显示用户上传的图片,这样我就可以根据用户上传的图片制作图库。
问题是表单显示没有任何问题,但我很难显示上传的照片。 (它们也没有任何错误地上传到数据库。)
我的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 模式。