python - Django - 如何捕获和记录选定的图像
问题描述
我正在尝试使用可视界面过滤掉不适当的图像。不适当的图像是主观的,这就是为什么我希望用户只选择适当的图像(一次选择多个)并在选择完成后按“完成”。用户的输入应存储在类似于以下的数据库中:
user_x = image1, image2, image4 ......
user_y = image6, image2, image3 ......
.
.
这是它目前的样子:图像过滤
我是 Django 的完全初学者,我不知道该怎么做。任何帮助将不胜感激。
filter.html (显示图像的模板)
<div class="container-fluid my-container">
{% filter_images_normal 3 as images %}
<div class="row no-pad display-flex my-row">
{% for image in images %}
<div class="col-xl-4 col-lg-4 col-md-4 col-sm-4 col- my-col my-col-xl-4 col-lg-4 col-md-4 col-sm-4 col-4 my-col">
<input class="img-thumbnail" type="image" id="image" alt="Image" src="{{ MEDIA_URL}}{{ image }}">
</div>
{% endfor %}
</div>
<button type="button" class="btn btn-primary btn-lg btn-block">Finish</button>
</div>
filter_images.py (从文件夹中选择不同的随机图像的模板标签)
@register.simple_tag
def filter_images_normal(count=3):
valid_extensions = ('.jpg', '.jpeg', '.png', '.gif')
rand_dir = '/static/app_filter/images/normal/'
path = '/app_filter/static/app_filter/images/normal/'
files = [f for f in os.listdir(settings.BASE_DIR + path)
if f[f.rfind("."):] in valid_extensions]
# print(random.sample(files, count))
print(rand_dir)
return [rand_dir + filename for filename in random.sample(files, count)]
模型.py
class Normal(models.Model):
appropriate_images_normal = models.TextField(max_length=30)
视图.py
def pickfeel_filter_normal(request):
return render(request, "app_filter/filter-normal.html")
解决方案
以用户友好的方式执行此操作的唯一方法是使用 javascript:
- 在 Django 方面,这是一个简单
Form
的MultipleChoiceField
选项,其中选择需要反映您向用户显示的图像。这些值需要是唯一可识别的值,以便您知道选择了哪个图像并将其映射回实际文件。 - 在您的视图中为图像创建选项(不使用模板标签),并将图像在您的上下文中作为选项传递给您的表单字段。
- 在您的模板中,将此表单字段呈现为隐藏状态。它将是
<select>
多个设置为 true 的字段。接下来,使用<img>
标签而不是标签来渲染您的图像<input>
。 - 使用 javascript,检测用户何时单击任何图像并做两件事: 1. 切换选择指示器以向用户显示图像是否被选中。
<select>
2. 从选定的选项中添加/删除图像。
这样,当提交表单时,唯一重要的字段将是您使用 javascript 填充的隐藏字段。如果您的表单中的字段被调用image_selection
,那么form.cleaned_data['image_selection']
将自动成为所选图像的列表。
推荐阅读
- javascript - 无法在 webgl 中将画布渲染为纹理,但会渲染蓝色
- c# - 使用原始 email.body 将电子邮件另存为 .eml
- r - 如何在行不是所有 NA 的数据帧行中替换 NA
- javascript - 从 html 表中的 firebase 中检索同一级别节点的数据
- excel - 使用范围偏移执行直到循环
- python - 如何在 groupadd cloud-init 中制作自定义 GID?
- weaviate - 如何对 Weaviate 中的另一个对象进行交叉引用?
- javascript - 如何找到可以将数组中的数字相加的所有方法
- couchbase - Couchbase operator 1.1.0 到 1.2.0 升级问题
- gdal - GDAL 3.0.1 的源安装失败,未定义对 EVP_MD_CTX_new 和 EVP_MD_CTX_free 的引用