2017-09-20 26 views
1

我正在使用AJAX(以及一些Angular)保存表單的草稿。當我在Django中保存(並重新填充)我的表單時,爲什麼我會得到'

<!-- index.html --> 

... 
<input id="id_title" name="title" ng-model="title" placeholder="Question Title" type="text" value="" required /> 
... 

<script> 

    app.controller("addQuestionCtrl", function($http) { 

     $scope.title = '{% if form.title.value is not None %}{{ form.title.value }}{% endif %}'; 
     ... 

     $interval(function() { 
      ... 
      data = {title:''+$scope.title, ...}; 
      $http.post("{% url 'save_draft' %}", data).then(function(response) { 
       ... 
      }, function failureCallback(error) { 
       ... 
      }); 
     }, 10000); 

    }); 

</script> 

這是一切工作正常,併發送一個''。在我view.py我轉換數據並將其存儲在會話:

def save_draft(request): 
    .... 
    posted = json.loads(request.body.decode("utf-8")) 
    ... 
    request.session['draft'] = { 
     'title': posted.get('title', None), 
     ... 
    } 

,然後填寫相關字段在頁面加載時

def question_add(request): 
    .... 
    if request.method == 'POST': 
     .... 
    else: 
     draft_question = request.session.get('draft', False) 
     if draft_question: 
      form = QuestionAddForm(initial={ 
       'title':draft_question['title'], 
       ... 
      }) 

不幸的是這原來這

enter image description here

分成這個

enter image description here

它不是在客戶端的編碼問題,因爲該領域呈現爲

<input id="id_title" name="title" ng-model="title" ... value="&#39;title in quotes&#39;" /> 

我不知道爲什麼發生這種情況:(

+0

您應該在form類中實現json renderer方法,並返回可以在模板端用js解析的數據。 – mariodev

+0

任何你可以擴展的機會!?! – Sevenearths

回答

1

你應該做的,而不是(這僅爲草稿代碼):

class QuestionAddForm(forms.ModelForm): 
    # ... 

    def draft_json(self, request): 
     # use attribute or pass request to form init method 
     draft_data = request.session.get('draft', False) 
     return json.dumps(draft_data) 


# in your view 
context['draft_json'] = form.draft_json(request) 


# in template 
<script> 
    var draft_data = JSON.parse('{{ draft_json|safe }}'); 
    $scope.title = draft_data.title 
</script> 

這裏的要點是使用json格式呈現和解析數據。 更好的方法是使用ajax而不是從後端傳遞草稿數據,以避免將js代碼與模板呈現的內容混合在一起。

+0

這是一個好主意,好像數據是通過ajax形式從其他位置來的,它可以輕鬆地更新頁面內容。尼斯1 – Sevenearths

相關問題