2014-11-22 35 views
1

我想用django做探戈中的練習7,我必須通過向表單添加信息來將新頁面保存到特定類別。頁面不保存django中的表單數據

所以我寫新代碼的forms.py

class PageForm(forms.ModelForm): 
    title = forms.CharField(max_length=128, help_text="Please enter the title of the page.") 
    url = forms.CharField(max_length=200, help_text="Please enter the url of the page.") 
    views = forms.IntegerField(widget=forms.HiddenInput(), initial=0) 

    class Meta: 
     model = Page 

    def clean(self): 
     cleaned_data = self.cleaned_data 
     url = cleaned_data.get('url') 

     if url and not url.startswith('http//'): 
      url = 'http://' + url 
      cleaned_data['url'] = url 
     return cleaned_data  

     fields = ('title', 'url', 'views') 

    def save_form(self): 
     if self.is_valid(): 
      page = self.save(commit=False) 
      try: 
       cat = Category.objects.get(name=category_name) 
       page.category = cat 
      except: 
       return render_to_response('rango/add_category.html', {}, context) 
      page.views = 0 
      page.save() 

      return True 
     else: 
      return False 

然後我編輯views.py

def add_page(request, category_name_url): 
    context = RequestContext(request) 

    category_name = decode_url(category_name_url) 
    if request.method == 'POST': 
     form = PageForm(request.POST) 
     if form.save_form(): 
      return category(request, category_name_url) 
     else: 
      print form.errors 
    else: 
     form = PageForm() 

    return render_to_response('rango/add_page.html', 
      {'category_name_url': category_name_url, 
      'category_name': category_name, 
      'form': form}, 
      context) 

def decode_url(element): 
    return element.replace(' ', '_') 

def encode_url(element): 
    return element.replace('_', '') 

然後我創建的模板:

蘭戈

<body> 
    <h1>Add page to category</h1> 

    <form id="page_form" method="post" action="/"> 

     {% csrf_token %} 
     {% for hidden in forms.hidden_fields %} 
      {{ hidden }} 
     {% endfor %} 

     {% for field in form.visible_fields %} 
      {{ field.errors }} 
      {{ field.help_text }} 
      {{ field }} 
     {% endfor %} 

     <input type="submit" name="Submit" value="Add a page" /> 
    </form> 
</body> </html> 

我在category.html

<a href="/rango/category/{{ category_name_url }}/add_page/">Add page to this category</a> 

,當然是一個編輯urls.py提到了新的一頁

> url(r'^rango/category/(?P<category_name_url>\w+)/add_page/$', 
> views.add_page, name='add_page'), 

一切都是可見的,我能夠填寫表格。但是當我點擊按鈕確認數據時,頁面返回到主頁而不是在類別中,並且新頁面不保存在數據庫中。所以請某人,哪裏有錯誤?

回答

2

您的<form>元素的動作設置爲action="/"。這使表單提交發送POST請求到主頁而不是當前頁面。您可以通過將表單操作清空action=""以提交到當前URL或進行明確更正,並使用{% url %}模板標記進行所需的表單操作。

+0

謝謝馬克的回覆。我嘗試了你的建議,現在提交數據後,我留在add_page頁面,但沒有必要保存:-(所以我必須有更多的錯誤代碼:-( – 2014-11-22 17:20:26