이것은 Django와 Python 2.5를 사용합니다. 템플릿 변수에 뷰에 쓰고 양식을 제출할 때 목록을 복구 할 수있는 목록 목록이 있습니다. 나는 둘 중 하나만 할 수있다.Django는 JSON을 입력에 쓰고 템플릿에서 사용하고 읽을 수 있습니까?
dicts 목록에서 render_to_response를 사용할 때 템플릿의 값을 사용할 수 있지만 키는 작은 따옴표로 묶어 simplejson.loads가 실패합니다. render_to_response 전에 simplejson.dumps를 사용하여 dicts 목록을 변환하면로드가있는 목록을 복구 할 수 있지만 템플릿은 변수를 문자열로 간주합니다.
템플릿에서 변수를 사용하고 나중에 목록을 복구하려면보기의 두 입력에 작성해야합니다. 내가 뭔가를 놓친 것 같아.
다음은 예입니다.
test.py :
from django.shortcuts import render_to_response
from django.utils import simplejson
def test(request):
test_dict_list = [{'a': 1, 'b': 2, 'c': 3}, {'d1': 4,'e2': 5}]
test_dict_list_json = simplejson.dumps(test_dict_list)
str1 = request.GET.get("test_dict_list")
# u"[{'a': 1, 'c': 3, 'b': 2}, {'e2': 5, 'd1': 4}]"
try:
simplejson.loads(str1)
# fails because keys are single-quoted
except:
pass
str2 = request.GET.get("test_dict_list_json")
# u'[{"a": 1, "c": 3, "b": 2}, {"e2": 5, "d1": 4}]'
try:
list1 = simplejson.loads(str2)
# correct list of dicts since keys are double quoted
# [{u'a': 1, u'c': 3, u'b': 2}, {u'd1': 4, u'e2': 5}]
except:
pass
return render_to_response('testview.html',
{'test_dict_list': test_dict_list,
'test_dict_list_json': test_dict_list_json})
testview.html :
<h1>Testing</h1>
<form name="test_form" action="{% url test %}" method="get">
<h3>test_dict_list = {{ test_dict_list }}</h3>
{% for elt in test_dict_list %}
<ul>{{ elt }}</ul>
{% endfor %}
<h3>test_dict_list_json = {{ test_dict_list_json }}</h3>
{% for elt in test_dict_list_json %}
<ul>{{ elt }}</ul>
{% endfor %}
<input name="test_submit" type="submit" class="cpa-button" value="Test submit"/>
{# Invisible input to store persistent values across page loads #}
<input name="test_dict_list" type="text" style="display:none" value="{{ test_dict_list }}"/>
<input name="test_dict_list_json" type="text" style="display:none" value="{{ test_dict_list_json }}"/>
</form>
나는 이것이 일에 너무 가깝기 때문에 뭔가를 놓친다 고 생각했다. 그것은 1) django가 작은 따옴표로 핵심 따옴표를 강제하지 않고 이중 따옴표를 만든 다음 2) 사용하는 큰 따옴표 대신 HTML 값에 작은 따옴표를 사용하면 효과가 있습니다. – Mitch