python - 当 AJAX 在 Django 中保存(并重新填充)我的表单时,为什么我会收到 '

标签 python json django utf-8 ascii

我正在使用 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'],
                ...
            })

不幸的是,这变成了这样

enter image description here

进入此

enter image description here

这不是客户端的编码问题,因为字段呈现为

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

我不确定为什么会发生这种情况:(

最佳答案

您应该做什么(这只是草稿代码):

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/

相关文章:

java - 用java分割嵌套在json中的数组

python - opencv 版本 3.* HogDescriptor 最多接受 1 个参数(给定 5 个)

python - 使用 namespace 和 Python (lxml) 从 XML 中获取 XML 属性

json - cURL 和错误 411(内容长度)

json.Unmarshal 无法正常工作

python - Django 查询集,其中字段值位于列表中

django - 如何使用 django 进行调试?

java - 用于拍卖网站的框架的性能比较

python - 如何检测 Python 代码正在通过调试器执行?

python - NumPy 中的逐元素矩阵乘法