2016-12-21 1 views
0

사용자는 models.py를 통해 zip 파일을 업로드 할 수는 있지만 파일을 압축 해제하여 이미지를 반복하여 템플릿에 표시 할 수는 없습니다.Django의 모델을 통해 사용자가 업로드 한 파일의 압축을 풉니 다

Models.py

from django.db import models 
from django.core.urlresolvers import reverse 
from django.contrib.auth.models import User 
from django.conf import settings 
from .validators import validate_file_extension 

class Post(models.Model): 
    title = models.CharField(max_length=140) 
    body = models.TextField(max_length=250) 
    date = models.DateTimeField(auto_now=True, auto_now_add=False) 
    album_image = models.FileField(validators=[validate_file_extension]) 
    user = models.ForeignKey(User, default=1) 

    def get_absolute_url(self): 
    return reverse('photos:detail',kwargs={'pk':self.pk}) 

    def __str__(self): 
    return self.title 

views.py

포스트 생성 및 인덱스보기 작품/또는 내가 zip 파일을 업로드하고

을 반복하는 시도에 하나의 이미지를 업로드에서 변경 될 때까지 적어도 일
class IndexView(generic.ListView): 
    template_name='photos/post.html' 
    def get_queryset(self): 
     return Post.objects.filter(user=self.request.user) 

def DetailView(request,pk=""): 
    model = Post 
    z = zipfile.ZipFile() ### I am unsure of what goes here!! 
    context = { 
     "images": z, 
     } 
    template_name = 'photos/detail.html' 
    return render(request,template_name,context) 

class PostCreate(generic.CreateView): 
    form = PostForm() 
    model = Post 
    fields = ['title','body','album_image'] 
    if form.is_valid(): 
     instance = form.save(commit=False) 
     username = form.cleaned_data['username'] 
     album_image = form.cleaned_data['album_image'] 
     instance.save() 
     context = { 
     "form": form, 
     } 

detail.html

{% extends "homepage/header.html" %} 
{% block content %} 

{% for image in image%} 

<img src ="{{image.url}}" style="width:304px;height:228px;"> 

{% endif%} 
<h1>{{post.title}}</h1> 
<h3>{{post.user}}</h3> 
<h3>{{post.body}}</h3> 
<h3>{{post.date}}</h3> 
{% endblock %} 

post_form.html

<html> 
<body> 
{% if request.user.is_authenticated%} 
<h3>Hello {{request.user.username}}, please upload your folder as a .zip file</h3> 
{% endif %} 
<div class="container-fluid"> 

    <div class="row"> 

     <div class="col-sm-12 col-md-7"> 
      <div class="panel panel-default"> 
       <div class="panel-body"> 
        {% if request.user.is_authenticated %} 
      <form class="form-horizontal" role="form" action="" method="post" enctype="multipart/form-data"> 
         {% csrf_token %} 
       {{form.as_p}} 
          <div class="col-sm-offset-2 col-sm-10"> 
           <button type="submit" class="btn btn-success">Submit</button> 
          </div> 
         </div> 
        </form> 
     {% else %} 
     <p>You must be logged in to upload a file</p> 
       {% endif %} 
     </div> 
      </div> 
     </div> 
</body> 

</html> 

post.html

{% extends "homepage/header.html" %} 
{% block content %} 

{%if object_list %} 
<ul> 
    {% for album in object_list %} 
    <h3><a href = "{% url 'photos:detail' album.id %}">{{album.title}} - {{album.date}}</a></h3><br> 
    {% endfor %} 
</ul> 

{% else %} 
    <h3>You have no photo albums!</h3> 
{% endif %} 

{% endblock %} 

답변

1

내가 우편의 내용에주의하고 아마 파일 이름을 확인할 것/다음 힘처럼 여기 루프,하지만 뭔가 유형 일 (시험 안 함). 기본적으로 zip의 하위 폴더에 있지 않은 것으로 가정하고 내용을 추출한 다음 base64로 인코딩하고 데이터 형식을 지정하는 src에서 해당 인코딩 된 버전을 사용합니다.

# views.py 
import base64 
import zipfile 

def DetailView(request,pk=""): 
    model = Post 
    # z = zipfile.ZipFile() ### I am unsure of what goes here!! 
    mydoc = 'path_to_zip_file_here' 
    # probably should do some logic on the name and file type 
    # or be very aware of what is in the zip file 
    with zipfile.ZipFile(mydoc, 'r') as z: 
     for f in z.namelist(): 
      images.update({f: base64.b64encode(z.read(f)),}) 

    context = { 
     "images": images, 
     } 
    template_name = 'photos/detail.html' 
    return render(request,template_name,context) 

및 detail.html에

:

{% for name, image in images.items %} 
<img src ="data:image/jpeg;base64,{{ image }}" style="width:304px;height:228px;"> 
{% endfor%} 
+0

미안 내가 어떻게 zip 파일의 경로를 얻을 것입니다, 장고 아주 새로운 오전? settings.py w.r.t MEDIA_URL에서 만들어진 경로일까요? 도와 줘서 고마워! –

+0

네, 아마도. 초기 업로드는 어떻게 처리합니까? 어떻게 싱글 이미지를 보여 주셨습니까? 내가 의심하는 것과 같은 길 일 것이다. – AMG

+0

위와 같은 IndexView 클래스입니다. 그리고 위의 Def Detail 뷰는 원래 DetailView (generic.DetailView) 클래스 였고 모델과 템플릿 이름 만 포함하고 detail.html은 for 루프없이 동일했으며 대신

관련 문제