2010-03-05 2 views
0

J'essayais de comprendre comment ajax fonctionne avec django plusieurs fois, mais il semble qu'aucun didacticiel sur le web ne puisse m'aider. Je préfère essayer de construire un petit échantillon. Donc, en essayant de résoudre ce qui suit.django + ajax: Besoin d'une petite introduction pour les "dummies"

1) J'ai une fonction de visualisation très simple qui retourne un nombre aléatoire sur appel par ex.

def homepage(request): 
    id = randint(1, 6) 
    return render_to_response("home.html", 
           {"id" : id}, 
           context_instance = RequestContext(request)) 

2) I ont modèle très primitif, de sorte qu'il contient un certain nombre et un bouton qui déclenche le code JS sur clic, par exemple

{% extends "index.html" %} 

{% block head %} 

<script type="text/javascript"> 
    <!-- 
     function clickNewButton() 
     { 
     window.open("/"); 
     } 
     --> 
</script> 

{% endblock %} 

{% block content %} 
    <div id="meta"> 
    <form name="smallForm"> 
     <p> 
     {{ id }} 
     </p> 
     <input type="button" value="New" onClick="clickNewButton()"/> 
    </form> 
    </div> 

</div> 

{% endblock %} 

Donc, fondamentalement, la question est ... Comment puis-je recharger seulement la partie de la page qui contient le texte du numéro

{{id}}

dans mon cas.


Quelle sera la différence si je dois recharger un autre élément avec le clic (par exemple l'image)?


Désolé, la question est simplement stupide. Je ne sais pas où commencer ... :(


aussi, comment puis-je par exemple ne change pas partie visible de la page? Par exemple l'un des flashvars d'exemple swfobject, dans le cas où je recharge dynamiquement application flash, à obtenir de nouveaux params

Répondre

2

Vous pouvez créer une vue qui renvoie l'identifiant

def id(request): 
    return HttpResonse(randint(1, 6)) 

et le charger avec AJAX par exemple, avec jQuery:.

$('#clickme').click(function(){ $('#randomnumber').load('/api/random.txt'); }); 

Mais si vous avez besoin de quelque chose de plus gros, créez une API complète avec Piston (http://bitbucket.org/jespern/django-piston/) et utilisez-la. Et mieux apprendre jQuery d'abord;)

+0

Salut! Juste un petit conseil. Comment rafraîchir l'objet flash? Après un clic sur le bouton. –

+0

utilisez-vous SWFObject? aussi, avez-vous vraiment besoin de flash? c'est un gros mangeur de CPU – myfreeweb

1

Je vais répéter ma réponse standard à cette question: utiliser le jQuery Taconite Plugin. Il est facile à configurer, fonctionne parfaitement avec plusieurs navigateurs et vous donne un contrôle incroyable sur toute la page. C'est une solution fire-and-forget en ce que tout ce que vous faites est d'envoyer la demande. Tout l'AJAXiness est géré pour vous et toutes les modifications sont appliquées automatiquement. Tout ce que vous pouvez faire avec jQuery peut être déclenché avec ce plugin, jusqu'à et y compris causant eval() d'un morceau de Javascript (qui peut alors, bien sûr, faire quoi que ce soit vous aimez).

Parce que j'ai donné cette réponse environ 6 ou 7 fois maintenant, j'ai finalement décomposé et créé un fichier téléchargeable avec my Taconite class and a simple usage example. Faites-moi savoir si vous avez des questions et/ou des problèmes avec cela.

0

Voici exemple qui convient parfaitement à votre question en utilisant l'extension Dajax django:

http://www.dajaxproject.com/random/

Dajax est un outil puissant pour facilement et super rapidement développer la logique de présentation asynchrone dans les applications Web, en utilisant Python et presque pas de code source JavaScript. Avec Dajax, vous pouvez modifier votre structure DOM directement à partir de Python.

C'est vraiment facile à utiliser.