J'essaie de transmettre les paramètres d'URL à un modèle Django comme celui-ci ...
response = render_to_string('persistConTemplate.html', request.GET)
C'est la ligne d'appel de mon fichier views.py. persistConTemplate.html est le nom de mon modèle et request.GET est le dictionnaire qui contient les paramètres d'URL.
Dans le modèle, j'essaie d'utiliser l'un des paramètres tels que celui-ci ...
{% for item in (numItems) %}
item {{item}}
{% endfor %}
numItems est l'un des paramètres url que j'envoie dans ma requête comme ceci ...
http:/someDomain/persistentConTest.html/?numItems=12
Lorsque j'essaie la boucle for ci-dessus, j'obtiens une sortie comme celle-ci ....
image 1 image 2
J'attends et aimerais voir l'image Word imprimée 12 fois ...
image 1 image 2 image 3 image 4 image 5 image 6 image 7 image 8 image 9 image 9 image 10 image 11 image 12
Quelqu'un peut-il s'il vous plaît me dire ce que je vais mal?
Oui, la place pour cela est dans la vue.
Je pense que l'exemple ci-dessus ne fonctionnera pas - vous ne pouvez pas parcourir un nombre entier.
numItems = request.GET.get('numItems')
if numItems:
numItems = range(1, int(numItems)+1)
return direct_to_template(request, "mytemplate.html", {'numItems': numItems})
{% for item in numItems %}
{{ item }}
{% endfor %}
vous pouvez contraindre une str à un int en utilisant le filtre d'ajout
{% for item in numItems|add:"0" %}
https://docs.djangoproject.com/en/dev/ref/templates/builtins/#add
contraindre int à str juste utiliser slugify
{{ some_int|slugify }}
EDIT: Cela dit, je suis d’accord avec les autres pour dire que vous devriez normalement procéder de la sorte - utilisez ces astuces uniquement lorsque les alternatives sont bien pires.
J'aime créer un filtre personnalisé:
# templatetags/tag_library.py
from Django import template
register = template.Library()
@register.filter()
def to_int(value):
return int(value)
Usage:
{% load tag_library %}
{{ value|to_int }}
C'est pour les cas où cela ne peut pas être facilement fait en vue.
Vous devez ajouter du code à votre vue pour décompresser les paramètres GET et les convertir en valeurs souhaitées. Même si numItems
était un entier, la syntaxe que vous montrez ne vous donnerait pas le résultat souhaité.
Essaye ça:
ctx = dict(request.GET)
ctx['numItems'] = int(ctx['numItems'])
response = render_to_string('persistConTemplate.html', ctx)
Ma solution est un peu un bidouillage et très spécifique ..
Dans le modèle, je souhaite comparer un pourcentage avec 0,9 et il n'atteint jamais 1, mais toutes les valeurs sont considérées comme une chaîne dans le modèle et aucun moyen de convertir une chaîne en float.
Alors j'ai fait ça:
{% if "0.9" in value %}
...
{% else %}
...
{% endif %}
Si je veux détecter une valeur supérieure à 0,8, je dois faire:
{% if ("0.9" in value) or ("0.8" in value) %}
...
{% else %}
...
{% endif %}
C'est un bidouillage, mais cela suffit dans mon cas. J'espère que cela pourrait aider les autres.
La méthode la plus simple consiste à utiliser le filtre intégré floatformat.
Pour Integer
{{ value|floatformat:"0" }}
Pour valeur float avec 2 précision
{{ value|floatformat:"2" }}
Il sera également arrondi à la valeur la plus proche. pour plus de détails, vous pouvez vérifier https://docs.djangoproject.com/fr/1.10/ref/templates/builtins/#floatformat .