2009-12-16 6 views
0

Mon codeDjango bug avec une étiquette

{% if GET['search'] % } 
      {% block count codes|length as counter %} 

est le suivant valide si -clause comme une balise Django?

{% if GET['search'] % } 

Le code suivant me donne une erreur bloc ne prend qu'un seul argument. Quel est le problème dans le code?

{% block count codes|length as counter %} 

Répondre

5

Django n'est pas PHP.

Vous essayez d'utiliser un filtre de modèle dans une balise de modèle. Vous pouvez utiliser une balise ou un filtre, mais pas les deux. De plus, étant donné que la balise block prend seulement une étiquette pour le bloc, je ne suis pas sûr de savoir ce que le code de modèle que vous avez écrit est censé faire. En outre, êtes-vous sûr que GET['search'] est la syntaxe valide dans un tag de modèle?

Je devine un peu à votre vue et les exigences de modèle, mais voici comment je voudrais aborder cela à votre place. Il y a un certain nombre de lacunes que vous devrez combler par vous-même selon votre situation.

En views.py:

from django.shortcuts import render_to_response 

def my_view(request): 
    request_was_search = False 
    codes = [] 

    if request.GET.has_key('search'): 
     request_was_search = True 
     codes = some_function_you_define_to_get_codes() 

    return render_to_response('foo.html', 
           {'codes':codes, 
           'request_was_search':request_was_search}) 

Dans le modèle:

{% block count %} 
    {% if request_was_search %} 
     // do whatever you want here 
     <p>There were {{ codes|length }} codes submitted.</p> 
     // end example 
    {% endif %} 
{% endblock %} 
+0

Il est faux de dire que vous ne pouvez pas utiliser la syntaxe de filtre dans une balise. Cela dépend entièrement de la façon dont la balise est écrite - vous pouvez certainement évaluer les filtres dans la balise, si la balise appelle les fonctions de résolution pertinentes. –

3

Cette syntaxe est incorrecte. Essayez ceci:

{% if GET.search % } 

Ceci suppose que vous avez GET dans le contexte passé à votre modèle.

+2

+1 règle générale, vous ne jamais utiliser la syntaxe dictionnaire dans un gabarit. –

+0

@Chase: Malheureusement, je ne suis pas convaincu de l'existence de ces personnes appelées "concepteurs de gabarits". Cela signifie que le modèle est soit fait par un designer ... nah, ne va pas arriver, ou un programmeur ... ouais, c'est ce qui se passe dans mon quartier. Je pense qu'ils ont vraiment besoin de regarder la réalité ici et d'aller avec Jinja2 ou quelque chose de très proche (c'est plus rapide, aussi). –

1

d'abord définir des blocs, puis ajoutez le code à l'intérieur

{% block header %} 
<h1>My Site</h1> 
{% endblock header %} 
Questions connexes