【发布时间】:2015-08-20 19:56:03
【问题描述】:
我正在尝试创建一个图片库,人们可以在其中上传多张图片。上传图片有 8 个字段。我遇到的问题是,当用户上传的图片少于 8 张时。如果其中一个图像字段留空,则会导致图库在该特定字段中为空白。
目前,当我返回图片时,我会对其进行过滤以显示上传的最新图片。 示例:
gallery = Content.objects.filter(user=request.user).order_by("-id")[0]
我想知道是否有人可以帮助我找到一种方法,当我使用时:
content.image1 = request.FILES.get('image1_upload', None)
如果返回 None 我可以让 Django 使用提交的最后一个图像,而不是它返回的 None。我觉得应该是这样的:
if 'image1_upload' in request.FILES:
content.image1 = request.FILES('image1_upload')
elif None:
content.image1 = Content.objects.get("the last uploaded image")
感谢您的帮助!下面是我的代码”
Views.py:
@login_required
def register(request):
if request.POST:
content = Content()
content.user = request.user
content.image1 = request.FILES.get('image1_upload', None)
content.image2 = request.FILES.get('image2_upload', None)
content.image3 = request.FILES.get('image3_upload', None)
content.image4 = request.FILES.get('image4_upload', None)
content.image5 = request.FILES.get('image5_upload', None)
content.image6 = request.FILES.get('image6_upload', None)
content.image7 = request.FILES.get('image7_upload', None)
content.image8 = request.FILES.get('image8_upload', None)
content.terms = request.POST.get('terms')
content.date = timezone.now()
content.save()
return redirect('/portal/register')
try:
gallery = Content.objects.filter(user=request.user).order_by("-id")[0]
print gallery
return render(request, 'portal/register.html', {'gallery': gallery})
except ObjectDoesNotExist:
print 'Does Not Exist!'
return render(request, 'portal/register.html')
型号:
def content_file_name(instance, filename):
return '/'.join(['content', instance.user.username, filename])
class Content(models.Model):
user = models.OneToOneField(User, unique=True)
image1 = models.ImageField(upload_to=content_file_name, null=True, blank=True)
image2 = models.ImageField(upload_to=content_file_name, null=True, blank=True)
image3 = models.ImageField(upload_to=content_file_name, null=True, blank=True)
image4 = models.ImageField(upload_to=content_file_name, null=True, blank=True)
image5 = models.ImageField(upload_to=content_file_name, null=True, blank=True)
image6 = models.ImageField(upload_to=content_file_name, null=True, blank=True)
image7 = models.ImageField(upload_to=content_file_name, null=True, blank=True)
image8 = models.ImageField(upload_to=content_file_name, null=True, blank=True)
terms = models.ImageField(upload_to=content_file_name, null=True, blank=True)
HTML:
{% extends 'portal/base.html' %}
{% load staticfiles %}
{% block head_block %}
<script language="javascript" type="text/javascript" src="{% static 'js/input.js' %}"></script>
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js" type="text/javascript"></script>
{% endblock %}
{% block body_block %}
<div class="container">
<form role="form" method="post" action="." id="js-upload-form" enctype="multipart/form-data">
{% csrf_token %}
<div class="row">
<div class="col-lg-12">
<h1 class="page-header">{{ user.username }}</h1>
</div>
<div class="col-lg-3 col-md-4 col-xs-6 thumb">
<a class="thumbnail" href="#">
{% if gallery.image1 %}
<img class="img-responsive" id="image1" src="/media/{{ gallery.image1 }}" alt="">
{% else %}
<img class="img-responsive" id="image1" src="/media/images/placeholder.png" alt="">
{% endif %}
</a>
<input type="file" name="image1_upload" id="image1_upload" multiple>
</div>
<div class="col-lg-3 col-md-4 col-xs-6 thumb">
<a class="thumbnail" href="#">
{% if gallery.image2 %}
<img class="img-responsive" id="image2" src="/media/{{ gallery.image2 }}" alt="">
{% else %}
<img class="img-responsive" id="image2" src="/media/images/placeholder.png" alt="">
{% endif %}
</a>
<input type="file" name="image2_upload" id="image2_upload" multiple>
</div>
<div class="col-lg-3 col-md-4 col-xs-6 thumb">
<a class="thumbnail" href="#">
{% if gallery.image3 %}
<img class="img-responsive" id="image3" src="/media/{{ gallery.image3 }}" alt="">
{% else %}
<img class="img-responsive" id="image3" src="/media/images/placeholder.png" alt="">
{% endif %}
</a>
<input type="file" name="image3_upload" id="image3_upload" multiple>
</div>
<div class="col-lg-3 col-md-4 col-xs-6 thumb">
<a class="thumbnail" href="#">
{% if gallery.image4 %}
<img class="img-responsive" id="image4" src="/media/{{ gallery.image4 }}" alt="">
{% else %}
<img class="img-responsive" id="image4" src="/media/images/placeholder.png" alt="">
{% endif %}
</a>
<input type="file" name="image4_upload" id="image4_upload" multiple>
</div>
<div class="col-lg-3 col-md-4 col-xs-6 thumb">
<a class="thumbnail" href="#">
{% if gallery.image5 %}
<img class="img-responsive" id="image5" src="/media/{{ gallery.image5 }}" alt="">
{% else %}
<img class="img-responsive" id="image5" src="/media/images/placeholder.png" alt="">
{% endif %}
</a>
<input type="file" name="image5_upload" id="image5_upload" multiple>
</div>
<div class="col-lg-3 col-md-4 col-xs-6 thumb">
<a class="thumbnail" href="#">
{% if gallery.image6 %}
<img class="img-responsive" id="image6" src="/media/{{ gallery.image6 }}" alt="">
{% else %}
<img class="img-responsive" id="image6" src="/media/images/placeholder.png" alt="">
{% endif %}
</a>
<input type="file" name="image6_upload" id="image6_upload" multiple>
</div>
<div class="col-lg-3 col-md-4 col-xs-6 thumb">
<a class="thumbnail" href="#">
{% if gallery.image7 %}
<img class="img-responsive" id="image7" src="/media/{{ gallery.image7 }}" alt="">
{% else %}
<img class="img-responsive" id="image7" src="/media/images/placeholder.png" alt="">
{% endif %}
</a>
<input type="file" name="image7_upload" id="image7_upload" multiple>
</div>
<div class="col-lg-3 col-md-4 col-xs-6 thumb">
<a class="thumbnail" href="#">
{% if gallery.image8 %}
<img class="img-responsive" id="image8" src="/media/{{ gallery.image8 }}" alt="">
{% else %}
<img class="img-responsive" id="image8" src="/media/images/placeholder.png" alt="">
{% endif %}
</a>
<input type="file" name="image8_upload" id="image8_upload" multiple>
</div>
</div>
<br>
<!--<div class="form-group">-->
<!--<textarea name="terms" id="terms" class="form-control input-sm" placeholder="Terms" value="{{ content.terms }}"></textarea>-->
<!--</div>-->
<div class="form-group">
<input type="text" name="terms" id="terms" class="form-control input-sm" placeholder="terms" value="{{ gallery.terms }}">
</div>
<br>
<input type="submit" value="Register" id="js-upload-submit" class="btn btn-info btn-block">
</form>
<br>
<!-- Button trigger modal -->
<button type="button" class="btn btn-primary btn-lg" data-toggle="modal" data-target="#myModal">
iPad View
</button>
<!-- Modal -->
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
<div class="modal-dialog modal-lg" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title" id="myModalLabel">Modal title</h4>
</div>
<div class="modal-body">
<div class="row">
<div class="col-lg-12">
<h1 class="page-header">{{ user.Username }}</h1>
</div>
<div class="col-lg-3 col-md-4 col-xs-6 thumb">
<a class="thumbnail" href="#">
{% if gallery.image1 %}
<img class="img-responsive" id="image1" src="/media/{{ gallery.image1 }}" alt="">
{% else %}
<img class="img-responsive" id="image1" src="/media/images/placeholder.png" alt="">
{% endif %}
</a>
</div>
<div class="col-lg-3 col-md-4 col-xs-6 thumb">
<a class="thumbnail" href="#">
{% if gallery.image2 %}
<img class="img-responsive" id="image2" src="/media/{{ gallery.image2 }}" alt="">
{% else %}
<img class="img-responsive" id="image2" src="/media/images/placeholder.png" alt="">
{% endif %}
</a>
</div>
<div class="col-lg-3 col-md-4 col-xs-6 thumb">
<a class="thumbnail" href="#">
{% if gallery.image3 %}
<img class="img-responsive" id="image3" src="/media/{{ gallery.image3 }}" alt="">
{% else %}
<img class="img-responsive" id="image3" src="/media/images/placeholder.png" alt="">
{% endif %}
</a>
</div>
<div class="col-lg-3 col-md-4 col-xs-6 thumb">
<a class="thumbnail" href="#">
{% if gallery.image4 %}
<img class="img-responsive" id="image4" src="/media/{{ gallery.image4 }}" alt="">
{% else %}
<img class="img-responsive" id="image4" src="/media/images/placeholder.png" alt="">
{% endif %}
</a>
</div>
<div class="col-lg-3 col-md-4 col-xs-6 thumb">
<a class="thumbnail" href="#">
{% if gallery.image5 %}
<img class="img-responsive" id="image5" src="/media/{{ gallery.image5 }}" alt="">
{% else %}
<img class="img-responsive" id="image5" src="/media/images/placeholder.png" alt="">
{% endif %}
</a>
</div>
<div class="col-lg-3 col-md-4 col-xs-6 thumb">
<a class="thumbnail" href="#">
{% if gallery.image6 %}
<img class="img-responsive" id="image6" src="/media/{{ gallery.image6 }}" alt="">
{% else %}
<img class="img-responsive" id="image6" src="/media/images/placeholder.png" alt="">
{% endif %}
</a>
</div>
<div class="col-lg-3 col-md-4 col-xs-6 thumb">
<a class="thumbnail" href="#">
{% if gallery.image7 %}
<img class="img-responsive" id="image7" src="/media/{{ gallery.image7 }}" alt="">
{% else %}
<img class="img-responsive" id="image7" src="/media/images/placeholder.png" alt="">
{% endif %}
</a>
</div>
<div class="col-lg-3 col-md-4 col-xs-6 thumb">
<a class="thumbnail" href="#">
{% if gallery.image8 %}
<img class="img-responsive" id="image8" src="/media/{{ gallery.image8 }}" alt="">
{% else %}
<img class="img-responsive" id="image8" src="/media/images/placeholder.png" alt="">
{% endif %}
</a>
</div>
</div>
<p>
{{ gallery.terms }}
</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary">Save changes</button>
</div>
</div>
</div>
</div>
<script language="javascript" type="text/javascript" src="{% static 'js/preview.js' %}"></script>
{% endblock %}
<!--http://jsfiddle.net/Mqvgx/-->
【问题讨论】:
-
我认为您的问题与您想象的不同。你听说过循环吗?它们可以帮助您避免始终编写八次相同的代码,还可以帮助您避免遇到您最初描述的问题。
-
是的,我肯定听说过循环。我可以将多个图像保存到一个 imageField 然后按顺序调用它吗?你能举个例子吗?
-
您可以创建一个
Image模型,该模型具有指向它所属的Content实例的外键。然后每个Content实例可以有任意数量的Images。使用content_instance.image_set访问Content实例的Images(默认名称,可以通过related_name更改)
标签: python django image imagefield