2014-01-12 88 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屬性)

!這是一個相當具體的使用情況,但我希望它可以幫助別人節省時間

相關問題