Falc410
Vice Admiral
- Registriert
- Juni 2006
- Beiträge
- 6.640
Ich bin ein absoluter jQuery Anfänger und komme gerade nicht weiter.
Ich benutze ein Django Template um Nachrichten auf meiner Webseite anzuzeigen. Allerdings werden diese von Django direkt in den HTML Code eingebunden wenn die Seite ausgeliefert wird. Ich will das nun dynamisch mit jQuery machen. Dazu habe ich mir eine View geschrieben die mir die Nachrichten in JSON ausliefert. Soweit passt das alles auch schon. Das Problem ist, dass das Template ziemlich komplizierten HTML Code benutzt um eine Nachricht korrekt zu formatieren.
Hier der Ausschnitt aus dem Template:
Meine Idee war jetzt nur den div mit der id="messages" zu haben und den Rest mit jQuery zu erstellen, falls Nachrichten vorliegen.
Nur kommt da nicht der korrekte Code raus. Es ist komplettes Chaos Bei jeder Nachricht habe ich ja einen grossen Batzen statischen HTML Code und nur ganz wenig dynamisch was wirklich vom JSON kommt. Hier mal der Output wie er derzeit aussieht.
Wie geht man denn in jQuery am besten vor wenn man einfach ein Stück HTML Code erzeugen will und das in einen div einfügen möchte? Das mit appendTo scheint nicht unbedingt die beste Lösung zu sein. Habe auch schon versucht .html() zu benutzen aber das war auch nicht das Wahre - für einzelne Nachrichten funktioniert das aber nicht für mehrere.
Ich benutze ein Django Template um Nachrichten auf meiner Webseite anzuzeigen. Allerdings werden diese von Django direkt in den HTML Code eingebunden wenn die Seite ausgeliefert wird. Ich will das nun dynamisch mit jQuery machen. Dazu habe ich mir eine View geschrieben die mir die Nachrichten in JSON ausliefert. Soweit passt das alles auch schon. Das Problem ist, dass das Template ziemlich komplizierten HTML Code benutzt um eine Nachricht korrekt zu formatieren.
Hier der Ausschnitt aus dem Template:
Code:
{% if messages %}
<div class="container" id="messages">
<p></p>
{% for message in messages %}
<div class="12u">
<div class="alert alert-{{ message.tags }}" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
{{ message }}
</div>
</div>
{% endfor %}
</div>
{% endif %}
Code:
function getMessages() {
$.getJSON('messages', function(result) {
var messageList = $.map(result, function(msg, i) {
var listItem = $('<div></div>').addClass('12u').append('<div role="alert"></div>').addClass('alert alert-'+msg.level);
$('<button type="button" class="close" data-dismiss="alert" aria-label="Close"></button>').appendTo(listItem);
$('<span aria-hidden="true">×</span>').appendTo(listItem);
$('<p>'+msg.body+'</p>').appendTo(listItem); // eigentlich ohne <p> aber nur den content kann ich nicht appendTo machen
return listItem;
});
$('#messages').append('<p></p>').html(messageList);
});
Nur kommt da nicht der korrekte Code raus. Es ist komplettes Chaos Bei jeder Nachricht habe ich ja einen grossen Batzen statischen HTML Code und nur ganz wenig dynamisch was wirklich vom JSON kommt. Hier mal der Output wie er derzeit aussieht.
Code:
<div class="container" id="dynamic-messages">
<div class="12u alert alert-info"><div role="alert"></div>
<button type="button" class="close" data-dismiss="alert" aria-label="Close"></button>
<span aria-hidden="true">×</span>
<p>You have been promoted to the rank "Beginner"! Congratulations!</p>
</div>
<div class="12u alert alert-success"><div role="alert"></div>
<button type="button" class="close" data-dismiss="alert" aria-label="Close"></button>
<span aria-hidden="true">×</span><p>Test Nachricht 2</p>
<p></p></div></div>
Wie geht man denn in jQuery am besten vor wenn man einfach ein Stück HTML Code erzeugen will und das in einen div einfügen möchte? Das mit appendTo scheint nicht unbedingt die beste Lösung zu sein. Habe auch schon versucht .html() zu benutzen aber das war auch nicht das Wahre - für einzelne Nachrichten funktioniert das aber nicht für mehrere.