我想在更新模式下在 html 模板中打开一条特定记录,我希望之前为此记录插入的每个值都在这些字段中,我在文本字段中获得了每个必需的值字段,但在包含图像的文件字段中,它显示没有选择任何文件,因为我希望图像文件名 (url( 在那里。
我没有使用django表单,而是使用普通的引导形式。
models.py
from django.db import models
from django.contrib.auth.models import User
class Product(models.Model):
title = models.CharField(max_length=255)
pub_date = models.DateTimeField()
body = models.TextField()
image = models.ImageField(upload_to='images/') # i m facing problem for this field
icon = models.ImageField(upload_to='images/') # i m facing problem for this field as well
url = models.TextField()
votes_total = models.IntegerField(default=1)
hunter = models.ForeignKey(User,on_delete=models.CASCADE)
def __str__(self):
return self.title
def summary(self):
return self.body[:100]
def short_pub_date(self):
return self.pub_date.strftime('%b %e %Y')
#views.py
def myproducts_update(request,product_id):
product = get_object_or_404(Product,pk=product_id)
print(product.image) # this prints the name of the file (images/37003.jpeg)
return render(request,'products/myproducts_update.html',{'product':product})
模板(myproducts_update.html(
{% extends 'base.html' %}
{% block content %}
{% if error %}
{{error}}
{% endif %}
<br>
<br>
<div class="container">
<div class="jumbotron">
<h2>Update Product</h2>
<form action="{% url 'create' %}" method="POST" enctype="multipart/form-data">
{% csrf_token %}
<div class="form-group">
<label for="title">Title:</label>
<input type="text" class="form-control" id="email" value={{product.title}} placeholder="please enter title" name="title" required>
</div>
<div class="form-group">
<label for="body">Description:</label>
<input type="text" class="form-control" id="body" value={{product.body}} placeholder="Description" name="body" required>
</div>
<div class="form-group">
<label for="url">URL:</label>
<input type="text" class="form-control" id="url" value={{product.url}} placeholder="please enter url" name="url" required>
</div>
<br>
<div class="row">
<div class="col-sm-6">
<div class="form-group">
<label for="icon">
<strong>Icon:</strong></label>
<input type="file" id="icon" name="icon" value={{product.icon}} required>
</div>
</div>
<div class="col-sm-6">
<div class="form-group">
<label for="url">
<strong>Image:</strong></label>
<input type="file" id="image" placeholder="please enter url" name="image" value={{product.image}} required>
</div>
</div>
</div>
<br>
<input type="submit" value="Update Product" class="btn btn-primary">
</form>
</div>
</div>
{% endblock %}
包含我有问题的表单图像的链接
我在模板中获取图像的网址时遇到问题,伙计们请帮助我
提前感谢!
在你的<form>
中尝试这样的事情:
<div class="margintop50px">
<img {% if object.image %} src="{{ object.image.url }}" {% else %} alt="You have no image." {% endif %}>
<input type="file" name="image" accept="image/*">
</div>
更新:我刚刚检查了你的 views.py。很抱歉没有早点注意到,但您的 myproducts_update(( 函数永远不会 .save(( 的任何内容,因此不会显示任何内容。尝试将该函数更改为如下所示的内容。它假设该产品已经在其他地方创建,因为我不知道您为达到这一步所做的任何其他观点(也许您最初添加了管理面板中的所有图片/文本?就个人而言,我会更改您的函数的名称,因为您的表单转到'create'
,但是您显示的函数指出这是关于更新它的,并且在设计它时通常不是一条明确的路径,因为create
某些东西与'update'
不同。因此,如果以下内容仍然不起作用,我需要查看您的'create'
视图以及所有这些函数的 urlpatterns(。
无论哪种方式,都有更好的方法来改进以下内容(例如我上面谈到的(,但这就是我在不知道这些东西的情况下能给你的全部:
views.py
def myproducts_update(request,product_id):
product = get_object_or_404(Product,pk=product_id)
if request.method == 'POST':
product.body = request.POST.get('body', False)
product.title = request.POST.get('title', False)
product.url = request.POST.get('url', False)
product.icon = request.FILES.get('icon', False)
product.image = request.FILES.get('image', False)
product.save()
return render(request,'products/myproducts_update.html',{'product':product})
然后使用上面的示例模板使其显示在该页面上。