我正在使用 AJAX(和一些 Angular)保存表单草稿。
<!-- 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
中,我转换数据并将其存储在 session 中:
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'],
...
})
不幸的是,这变成了这样
进入此
这不是客户端的编码问题,因为字段呈现为
<input id="id_title" name="title" ng-model="title" ... value="'title in quotes'" />
我不确定为什么会发生这种情况:(
最佳答案
您应该做什么(这只是草稿代码):
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 代码与模板渲染内容混合在一起。
关于python - 当 AJAX 在 Django 中保存(并重新填充)我的表单时,为什么我会收到 ',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46320459/