在 django 中使用 jQuery 预览 Ajax 头像

Posted

技术标签:

【中文标题】在 django 中使用 jQuery 预览 Ajax 头像【英文标题】:Ajax avatar preview with jQuery In django 【发布时间】:2012-04-19 13:42:39 【问题描述】:

我一直在尝试学习教程。但它不想为我工作。我正在尝试显示一个简单的(或者我认为是这样的)头像预览。问题是它不会加载或接受头像。如果我能对此有另一种看法,也许可以告诉我我做错了什么;我会非常感激。

模板:(表格为整体用户信息大表格)

<form class="inline" enctype="multipart/form-data" method="POST" action="/profile/edit/ role /" id="avatarLoadForm">
     <input type="hidden" name="next" value="/account/settings/">
     % csrf_token %
     % if user_info_form.errors % user_info_form.errors % endif %
     <div>
          <label class="form-label" for="id_avatar">Your Picture</label>
          <div id="preview" class="inline-block img-frame thick">   
               <img src="% if profile.avatar %% thumbnail profile.avatar 120x120 crop %% else % DEFAULT_AVATAR % endif %" id="thumb"   />
          </div>
           user_info_form.avatar 
     </div>
     <div id="edit-name">
          <label class="form-label" for="id_first_name">Name</label>
           user_info_form.first_name 
           user_info_form.last_name 
 ... And so on (other info not relevant)...

js:

(function() 
        var thumb = $('img#thumb');    
        new AjaxUpload('imageUpload', 
            action: $('#avatarLoadForm').attr('action'),
            name: 'avatar',

            onSubmit: function(file, extension) 
                $("#preview").html('<img id="loader" src=" STATIC_URL images/ajax-loader.gif" />');            
            ,
            onComplete: function(file, response) 
                thumb.load(function()
                    $("#preview").html('');
                    thumb.unbind();
                );
                thumb.attr('src', response);
            
        );

Views.py

@login_required        
def edit_profile(request, profile_type):
    if profile_type == 'investor':
        profile = InvestorProfile.objects.get(user=request.user)
    elif profile_type == 'manager':
        profile = ManagerProfile.objects.get(user=request.user)
    context = base_context(request)
    if request.method == 'POST':
        notify = "You have successfully updated your profile."
        user_info_form = UserInfoForm(request.POST, request.FILES)
        if user_info_form.is_valid():
            user_info_form.save(request.user, profile_type)
            response = simplejson.dumps("status": "Upload Success")
        return HttpResponse (response, mimetype='application/json')
    else:
        initial = 
        initial['first_name'] = request.user.first_name
        initial['last_name'] = request.user.last_name
        initial['email'] = request.user.email
        initial['about'] = profile.about
        initial['country'] = profile.country
        initial['about'] = profile.about
        user_info_form = UserInfoForm(initial=initial)
    context['user_info_form'] = user_info_form
    context['profile_type'] = profile_type
    context['profile'] = profile
    return render_to_response('settings/base.html', context, context_instance=RequestContext(request))

编辑: Forms.py:

class UserInfoForm(forms.Form):
    first_name = forms.CharField(widget=forms.TextInput(attrs='class':'input-text'), max_length=30)
    last_name = forms.CharField(widget=forms.TextInput(attrs='class':'input-text'), max_length=30)
    email = forms.EmailField(widget=forms.TextInput(attrs='class':'input-text'))
    about = forms.CharField(widget=forms.Textarea(attrs='class':'input-text'), required=False)
    country = forms.CharField(max_length=50, widget=forms.Select(choices=countries.COUNTRIES))
    avatar = forms.ImageField(required=False)
    #avatar = forms.ImageField(widget=forms.ClearableFileInput(attrs='id':'imageUpload'),required=False)
    investor_type = forms.CharField(max_length=4, widget=forms.Select(choices=choices), required=False)

【问题讨论】:

你能展示你的 forms.py 模块吗? 检查页面的 HTML 源代码。图片真的在里面吗?图片的网址是什么?我看到您正在使用缩略图,可能是缩略图生成出错了。 @FrantzdyRomain 添加了表格(抱歉,过了这么久,复活节到了。) 很酷。我建议看看 django-profiles 看看他们是如何实现他们的:D 【参考方案1】:

为了将来的参考,您应该将 Avatar 定义为具有自己的字段的模型,无论它是否是缩略图。但是你试过了吗

 <img src="% if profile.user %% thumbnail avatar 120x120 crop %% else % DEFAULT_AVATAR % endif %" id="thumb"   />

【讨论】:

以上是关于在 django 中使用 jQuery 预览 Ajax 头像的主要内容,如果未能解决你的问题,请参考以下文章

django-在Django中选择文件后预览照片

在 jQuery 中,使用 ajaxSend 预览 $.post 调用构建的 url

用于文档预览的 Jquery 脚本?

在 admin 中增加 django-filer 预览/缩略图

Jquery 打印预览不显示整页

如何使用jQuery在弹出窗口中预览输入类型=“文件”中的选定图像? [复制]