Background
Wenn Sie anzeigen möchten, wie es von context_data
von Template View
zu HTML ist, können Sie es anzeigen, indem Sie das Tag wie folgt festlegen.
views.py
from django.views.generic import TemplateView
class SampleTemplateView(TemplateView):
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['areas'] = ["japan","tokyo","osaka","nagoya","sapporo","sendai","fukuoka"]
return context
index.html
...
<ul>
{% for item in areas %}
<li> {{ item }} </li>
{% endif %}
</ul>
...
Wird angezeigt.
Es gibt jedoch Situationen, in denen Sie einen Wert direkt übergeben möchten, wenn Sie mit der Javascript-Bibliothek zeichnen möchten. Hier erfahren Sie, wie Sie es weitergeben.
Failure
Wenn Sie es so bestehen, wie es ist, ...
<script type="text/javascript">
var areas = "{{ areas }}";
console.log(areas);
</script>
['japan', 'tokyo', 'osaka', 'nagoya', 'sapporo', 'sendai', 'fukuoka']
Einfache Anführungszeichen, "<", ">" usw. werden automatisch konvertiert. Da es sich um einen Zeichenkettentyp handelt, dachte ich, es wäre in Ordnung, ihn mit "JSON.parse" zu diktieren, nachdem er durch einen regulären Ausdruck ersetzt wurde, aber ich konnte es nicht gut machen.
Als Ergebnis der Forschung habe ich zwei Methoden gefunden.
Method 1 Es ist schlammig, aber es ist eine Möglichkeit, jedes Element aufzurufen und in Javascript-Code zu schreiben.
var areas = [
{% for area in areas %}
{% with index=forloop.counter0 %}
{% if 0 < index%},{% endif %}
{% endwith %}
"{{area.name}}"
{% endfor %}
];
console.log(areas);
Method 2
Die andere Möglichkeit besteht darin, die automatische Fluchtsteuerung mit "autoescape" auszuschalten.
{% autoescape off %}
var areas = {{ areas }};
{% endautoescape %}
console.log(areas);
Dieser ist einfacher.
Reference
Recommended Posts