2014-01-12 31 views
3

我想从一个ImageField的显示图像。我正在使用Django crispy forms。看来我需要使用HTML布局帮手,但我不知道怎么在这里访问模板变量。ImageField的预览布局

下呈现空白图像标签:

HTML('<img src="{{ logo.url }}" />') 

难道我引用这个错误,或者是在有香脆的形式更好的方法?

以下是完整的代码,这样你可以得到一个更好的主意:

forms.py

class CompanyForm(forms.Form): 
    name = forms.CharField(required=False, label="Company name") 
    logo = forms.ImageField(required=False, label="Logo") 

    # form layout 
    helper = FormHelper() 
    helper.form_class = 'form-horizontal' 
    helper.layout = Layout(
     Div(
      'name', 
      HTML('<img src="{{ logo.url }}" />'), 
      css_class='span4', 
     ), 

     FormActions(
      Submit('submit', 'Save', css_class="btn-primary pull-right"), 
     ) 
    ) 

models.py

class Company(models.Model): 
    name = models.CharField(max_length=100) 
    logo = models.ImageField(upload_to = 'logos/', null=True) 

views.py

我设置形式的初始值在我看来:

... 
profile = Company.objects.get(name="foo") 
form = CompanyForm(initial={'name': profile.name, 'logo': profile.logo, }) 

context = { 
    'profile_form' : form, 
} 

return render_to_response('dashboard/company-profile.html', context_instance=RequestContext(request, context))  

公司profile.html

{% load crispy_forms_tags %} 
<div class="row"> 
    {% crispy profile_form %} 
</div> 

回答

11

好笑的是,我只是对同一问题今天工作的一个内嵌图片上传表单集,我结束了与此实现:

class ImageModelForm(forms.ModelForm): 

    class Meta: 
     model = ImageModel 

    def __init__(self, *args, **kwargs): 
     super(ImageModelForm, self).__init__(*args, **kwargs) 
     self.helper = FormHelper(self) 
     self.helper.form_tag = False 
     self.helper.disable_csrf = True 
     self.helper.layout = Layout(
      'title', 
      'description', 
      'imagefile', 
      HTML("""{% if form.imagefile.value %}<img class="img-responsive" src="{{ MEDIA_URL }}{{ form.imagefile.value }}">{% endif %}""",), 
      'flag_featured', 
     ) 
+0

完美一点! Muchas格拉西亚斯! – Banjer

+0

有一点是在提交表单后,img在页面加载时被破坏。如果我在页面上重新加载,则显示正常。你有这个问题吗?这是因为在提交表单后img src是'/ media/myfile.jpg'。在页面重新加载时,它正确地将其作为'/ media/logos/myfile.jpg'来获取。是否因为当页面从表单提交返回时文件没有上传完成?父媒体目录是否为临时上传位置?也许有另一个属性,我可以抓住,而不是'form.imagefile.value'? – Banjer

0

进一步@petkostas回答,特别是在从@Banjer形象重装评论: - 我也有这个问题,形式和管理的引入条件语句到views.py(注意,上下文报表不低于含税),以解决这个问题:

if request.method == "POST": 
     if form.is_valid(): 
      #do stuff 
     return HttpResponseRedirect(reverse('your_named_url')) 
elif request.method =="GET": 
     return render(request, 'path/to/template.html', context) 

这是什么确实是允许的页面与新的内容重新加载,如果它的更新(所以你可以使用前面提到的form.imagefile.value属性)

!这是一个相当具体的使用情况,但我希望它可以帮助别人节省时间

相关问题