0

画像の処理に django パッケージの sorl サムネイルを使用しています。

settings.py の構成は次のとおりです。

MEDIA_ROOT = '/home/hammad/virt_env/virt1/gccFishing/media'
MEDIA_URL = '/media/'

2 つのパスで画像をアップロードしました。問題は、最初のパスの画像がテンプレートにのみレンダリングされることです。

これは、うまく機能している私の最初のパスです。

  • /gccFishing/media/Images/にアップロードされ、このコードでテンプレートにレンダリングされるユーザー プロフィール写真

{% サムネイル user.image "50x50" crop="center" as im %}

 <img src="{{im.url}}" width="{{ im.width }}" height="{{ im.height }}">    

{% endthumbnail %}

これは、画像がアップロードされているがテンプレートにレンダリングされていない 2 番目のパスです。

  • 画像のアップロードパスは/gccFishing/media/Images/WallImages. このコードを使用して、それらをテンプレートにレンダリングします。

{% サムネイル post.image "150x150" crop="center" as im %}

 <img scr="{{im.url}}" width="{{im.width}}" height="{{im.height}}"></a>

{% endthumbnail %}

また、アクセスしようとすると{{post.image.url}}

次のエラーが表示されます。

The 'image' attribute has no file associated with it

何かご意見は ?

models.py

class Wallpost(models.Model):
    
    author = models.ForeignKey(User)
    posted_on = models.DateTimeField(auto_now_add = True)
    points = models.IntegerField(default = 0, validators = [MaxValueValidator(100)])    # relate this to user reputation    
    #location
    #spot

    image = ImageField(upload_to = Imagepost_path, null = False, blank = True

)

ビュー.py

class Wallview(View):
    
    
    def get(self, request, *args, **kwargs):    
        context = self.get_context_data()
        return render_to_response('wall.html', context, RequestContext(request))


    def post(self, request, *args, **kwargs):
        
        image = request.FILES.get('image', None)
        text = request.POST.get('text', None)
        user = request.user
        try:
            wallpost = Wallpost.objects.create(text = text, image = image, author = user)
            return HttpResponseRedirect('')
        except:
            return  HttpResponse('You should login to post')



def get_context_data(self, **kwargs):
            context = {}
            try:
                posts = Wallpost.objects.order_by('-posted_on')[:20]    
            except Wallpost.DoesNotExist:
                posts = None
            context['posts'] = posts
        return context
4

1 に答える 1

0

ModelForm を使用して、ファイルの取得と送信を処理します。次に、get() と post() ではなく、ビュー メソッドも 1 つだけ必要です。:

from django.http import HttpResponseRedirect
from django.shortcuts import render
from .forms import YourModelForm

def upload_file(request):
    if request.method == 'POST':
        form = YourModelForm(request.POST, request.FILES)
        if form.is_valid():
            # file is saved
            form.save()
            return HttpResponseRedirect('/success/url/')
    else:
        form = YourModelForm()
    return render(request, 'upload.html', {'form': form})

正しいオブジェクトを保存するためのすべてのロジックが処理されます。WallPost 画像に正しいオブジェクト タイプを保存していないと思われます。

于 2013-09-10T01:28:45.800 に答える