2017-07-11 9 views
-2

forms.py私のDjangoのフォームフィールドをテンプレートに表示されない

class ImageCreateForm(forms.ModelForm): 
     class Meta: 
      model = Image 
      fields = {'title', 'url', 'description'} 
      widgets = { 
       'url':forms.HiddenInput, 
      } 


     def clean_url(self): 
      url = self.cleaned_data['url'] 
      valid_extensions = ['jpg', 'jpeg'] 
      #The two below codes do exactly the same thing but partition is faster 
      extention = url.rpartition('.')[2].lower() 
      #extension = url.rsplit('.',1)[1].lower() 
      if extension not in valid_extensions: 
       raise forms.ValidationError('The given URL does not match valid image extensions') 
      return url 


     def save(self, force_insert=False,force_update=False,commit=True): 
      image = super(ImageCreateForm, self).save(commit=False) 
      image_url = self.cleaned_data['url'] 
      image_name = '{}.{}'.format(slugify(image.title), image_url.rpartition('.')[2].lower()) 
      #download image from the given URL 
      response = request.urlopen(image_url) 
      image.image.save(image_name,ContentFile(response.read()),save=False) 

      if commit: 
       image.save() 
      return image 

画像は大丈夫表示されますが、フィールドは

index.htmlを

{% extends 'base.html' %} 
{% load crispy_forms_tags %} 
{% block title %}Bookmark an image{% endblock %} 
{% block content %} 
<h1>Bookmark an image</h1> 
<img src="{{ request.GET.url }}" class="image-preview"> 
<form action="." method="post"> 
    {{ forms.as_p }} 
    {% csrf_token %} 
    <input type="submit" value= 'Bookmark it!'> 

</form> 
{% endblock %} 
+0

ビューに「フォーム」を定義しましたか? – hansTheFranz

+0

あなたのテンプレートには '{{forms.as_p}}'があります。通常、私は '{{form.as_p}} '(sを除く)を期待しています。あなたはあなたの意見を示していないので、これが問題であるかどうかはわかりません。 – Alasdair

+0

はい私は 'フォーム= ImageCreateForm(データ= request.POST)}' –

答えて

3
を示していません

このフォームに変更する

あなたはそれがそれのようには見えませんが、あなたの意見

def image_create(request): 
    if request.method == 'POST': 
     #form is sent 
     form = ImageCreateForm(request.POST) 
     if form.is_valid(): 
      #form data is valid 
      cd = form.cleaned_data 
      new_item = form.save(commit=False) 

      #assign current user to the item 
      new_item.user = request.user 
      new_item.save() 
      messages.success(request, 'Image added successfully') 

      #redirect to new created item detail view 
      return redirect(new_item.get_absolut_url()) 

    else: 
     #build form with data provided by the bookmarklet via GET 
     form = ImageCreateForm() 

    return render(request, 'images/image/index.html',{'section':'images', 'form':form}) 

とhtml内で{}

class ImageCreateForm(forms.ModelForm): 
     class Meta: 
      model = Image 
      fields = ['title', 'url', 'description'] 
      widgets = { 
       'url':forms.HiddenInput, 
      } 

{% extends 'base.html' %} 
{% load crispy_forms_tags %} 
{% block title %}Bookmark an image{% endblock %} 
{% block content %} 
<h1>Bookmark an image</h1> 
<img src="{{ request.GET.url }}" class="image-preview"> 
<form action="." method="post"> 
    {{ form.as_p }} 
    {% csrf_token %} 
    <input type="submit" value= 'Bookmark it!'> 

</form> 
{% endblock %} 
+0

**リスト** –

+0

からあなたのビューを投稿しても、イメージはまだフィールドしか表示されませんフォームを渡す@ragemon – Exprator

+1

@ragemonあなたはcreate.htmlにフォームを渡していますが、あなたのフォームはindex.htmlにリストされていますので、編集したansを試してみてください。助けてくれることを願っています – Exprator

0

、確認してくださいlistのフィールドを渡していないsetタイプif request.methodとそれに関連するelseが同じレベルにあること。 if form.is_validレベルに合うようにインデントされることがあります。

関連する問題