2013-04-14 2 views
0

J'ai écrit une petite étiquette de modèle personnalisé django (de inclustion_tag) que je veux utiliser pour afficher un tableau HTML montrant les marques et modèles de véhicules de la liste dans mon VehicleBrand et modèles VehicleModel, mais l'étiquette de modèle ne semble pas passer la variable de la requête de base de données dans la balise de template au html. Je suis un débutant à django, alors laissez-moi savoir si quelque chose me manque. Toute aide serait appréciée.Une django base inclusion_tag ne fonctionne pas

Voici mon étiquette de modèle qui est situé dans un sous mon application templates. Le répertoire de l'étiquette de modèle contient un _ initialisation _.py

from django import template 
from castester.models import VehicleBrand 

register = template.Library() 

@register.inclusion_tag("brand_model_select.html") 
def brand_model_select(): 
    brand_list = VehicleBrand.objects.all() 
    return {'brand_list':brand_list} 

Voici mon model.py

from django.db import models 

class VehicleBrand(models.Model): 
    description = models.CharField(max_length=100) 
    code = models.SlugField(primary_key=True) 

Voici mon brand_model_select.html

{% load castest_extras %} 
<table> 
    {% for brand in brand_list %} 
     <tr> 
      <td>{{ brand.code }}</td> 
      <td>{{ brand.description }}</td> 
     </tr> 
    {% endfor %} 
</table> 

Voici les urls ligne .conf où j'appelle mon code HTML à partir d'une vue basée sur la classe.

url(r'^$', TemplateView.as_view(template_name='brand_model_select.html')) 

est ici la sortie d'une requête sur le modèle de prouver que les données sont extraites de la base de données.

>>> from castester.models import VehicleBrand 
>>> VehicleBrand.objects.all().values() 
[{'code': u'1', 'description': u'FORD'}, {'code': u'2', 'description': u'HOLDEN'}] 

Une page blanche est rendu avec la source suivante. Où est la sortie de la requête que je passe de l'inclusion_tag?

<table> 

</table> 
+0

S'il vous plaît lire la section [ 'Code layout'] (https://docs.djangoproject.com/en/dev/howto/custom-template-tags/#code-layout) dans la documentation qui indique:' modèle personnalisé les tags et les filtres doivent être hébergés dans une application Django. Si elles se rapportent à une application existante, il est logique de les regrouper là; Sinon, vous devez créer une nouvelle application pour les conserver. L'application doit contenir un répertoire templatetags, au même niveau que models.py, views.py, etc. Si cela n'existe pas déjà, créez - ne pas oublier le fichier __init__.py pour assurer le répertoire est traité comme un Python package.' –

Répondre

1

Vous n'êtes pas censé rendre directement brand_model_select.html. Au lieu de cela, vous devez appeler votre balise de modèle à partir d'un autre modèle:

# in url conf 
`url(r'^$', TemplateView.as_view(template_name='homepage.html'))` 

# in homepage.html 
{% load castest_extras %} 
{% brand_model_select %} 

Le point d'une balise d'inclusion est que vous pouvez l'inclure dans une autre vue. Ce que vous faites en ce moment n'utilise pas du tout la balise template; au lieu de cela, il rend juste brand_model_select.html en ignorant complètement l'étiquette.

+0

Quel type me demande pourquoi OP pense qu'il a besoin d'une étiquette d'inclusion du tout. –

+0

Merci Dougal - ça a marché !!! Je ne suis qu'un débutant, alors je commence juste à comprendre certains concepts. Votre réponse m'a vraiment aidé. – user2278787